这问题比较刁钻。有人说是高中题目,不知道各位会不会呢?

ATGO 2008-05-08 05:18:31
已知屏幕上两点坐标分别是点a(x1, y1)和点b(x2,y2)。设c点在垂直于直线ab的线上,直线ac经过点a,并且c点与a点距离为m,求c点的坐标?
补充下面函数,以实现上面功能。

public Point[] GetPoint(Point a, Point c, int m)
{

}


本帖标题违反C#版关于标题的规定,提问者禁言30天+60天。本帖提问者在见到本通知后可按照C#版置顶帖中所述步骤申请提前解除禁言。

版主语:LZ你最强,所以给你最长的期限。一路顺风。
...全文
554 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
ATGO 2008-05-11
  • 打赏
  • 举报
回复
首先向版主道歉,因为我并不知道这标题会引起一些事情的,非常抱歉,如果可以的话,麻烦版主帮我把标题改一下。这个问题我用了同事的方法解出来了。确实很简单的问题。
解决后实现效果:



再次向各位道歉。

正解代码,往后会在BLOG(http://atgo.cnblogs.com/)上补上上面效果中的代码,和程序:

/// <summary>
/// 获取线点a(x1, y1) 点b(x2, y2)平行向左右移动offset后的矩形区域
/// </summary>
/// <param name="p_p1"></param>
/// <param name="p_p2"></param>
/// <param name="p_offset"></param>
/// <returns></returns>
public Point[] GetPoints(int x1, int y1, int x2, int y2, int p_offset)
{
double k = (((x2 - x1) == 0) ? 0 : (double)(y2 - y1) / (x2 - x1));

double sink = Math.Pow(Math.Pow(k, 2) / (1 + Math.Pow(k, 2)), 1 / 2);
double cosk = Math.Pow(1 / (Math.Pow(k, 2) + 1), 1 / 2);

if (k < 0)
cosk = -cosk;
else if ((y2 - y1) == 0)
sink = 0;
else if ((x2 - x1) == 0)
cosk = 0;

double ax = x1 + p_offset * sink;
double ay = y1 - p_offset * cosk;
double bx = x1 - p_offset * sink;
double by = y1 + p_offset * cosk;

double cx = x2 + p_offset * sink;
double cy = y2 - p_offset * cosk;
double dx = x2 - p_offset * sink;
double dy = y2 + p_offset * cosk;

Point a = new Point((int)ax, (int)ay);
Point c = new Point((int)cx, (int)cy);

Point b = new Point((int)bx, (int)by);
Point d = new Point((int)dx, (int)dy);
return new Point[] { a, c, d, b };
}
lxmzt2005 2008-05-10
  • 打赏
  • 举报
回复
哎,看了楼上所有同志们的回答,真是无语!

原题:
已知屏幕上两点坐标分别是点a(x1, y1)和点b(x2,y2)。设c点在垂直于直线ab的线上,直线ac经过点a,并且c点与a点距离为m,求c点的坐标?

居然没人说这题的叙述出现严重问题!

1,c点在垂直于直线ab的线上 --->难道有哪个点不在垂直于直线ab的线上?(即便是三维的情况)

2,直线ac经过点a ----->难道直线ac还有不经过点a的情况?

还好,楼主后来做了说明

由此可见中国的数学基础教育只差!
yiyeqiufeng 2008-05-09
  • 打赏
  • 举报
回复
呃,平面解析几何?貌似很正常的一道题,但是……
ab是直线还是线段?直线的话,就像楼上说的,以a为圆心,m为半径的圆;线段的话,就是平面解析几何,初中题了。
apollolb2005 2008-05-09
  • 打赏
  • 举报
回复
题目等价于求距离点a(x1, y1)为M的点的坐标
其实就是个圆
方程是 (x-x1)^2 + (y-y1)^2 = m^2

如果坐标就是所谓的屏幕坐标,
那就要注意y轴方向(下),和x1,y1,x,y都得是整数解

BoyHaXin 2008-05-09
  • 打赏
  • 举报
回复
两个点。

正反两个方向。。。

坐标点有一个与a点相同。。。距离可以确定另个一个点。。。
t88266236 2008-05-09
  • 打赏
  • 举报
回复
....
huxinyu929 2008-05-09
  • 打赏
  • 举报
回复
直接用坐标算;

m*m-((x2-x1)/2)^2-((y2-y1)/2)^2=((y2-y1)/(x2-x1)*x3-y3+y1-(y2-y1/x2-x1)x1)^2 / ((y2-y1)/(x2-x1))^2+1

ATGO 2008-05-09
  • 打赏
  • 举报
回复
这是我在做的流程图的一部分,做好了给大家看,如果能回答这题目而且又对代码有兴趣的话,我可以共享。
完成后会发表到我的blog上面
yunfeng007 2008-05-09
  • 打赏
  • 举报
回复
是个圆周,这个要求座标点也太没意义了吧?



sinxy 2008-05-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 mx1700 的回复:]
先画出 ab 直线

在以 a 为圆心,画半径为 m 的圆

从圆上任意找一点c,向 ab 直线做垂线,连接 ac

任意一个圆上的点c都符合要求
[/Quote]
正解 用数学表达式写出来就是
以点a为圆心,以m为半径的圆方程为:
(x-x1)^2 + (y-y1)^2 = m^2 ....................................(1)

垂直与直线ab的直线的斜率为
k=(y1-y2)/(x1-x2) 假设该斜率存在
那么 与直线ab垂直的直线方程为

y=kx + b .......................................................(2)
其中 b 不定,k即为上述的k,该方程表示一簇直线


现在的问题就是将(1)(2)两式连立求解,其中可以将 b 认为是常量


当垂直与直线ab的直线的斜率不存在时,该直线的方程可以写为
x=b.......................................................................(2')

此时将(1)(2')连立求解即可

最后得出的c点坐标结果是一个以b为参数的值,表示c点坐标不唯一
ATGO 2008-05-09
  • 打赏
  • 举报
回复
先谢谢各位的回答。而且很抱歉题目我没说明白。

应该是只有两个点的!

我想要的结果是函数而不是数学的表达式。我同事也帮我想到了一个方法,我正在试。
而且我还要算出另外b点的那两个点,条件跟a点类似。

题目是这样的:
已知屏幕上两点坐标分别是点a(x1, y1)和点b(x2,y2)。
设ac垂直于ab,并且c点与a点距离为m,求c点的坐标?


[Quote=引用 9 楼 sunshine_anycall 的回复:]
答案只有两个
经过a点垂直于ab的线段ac可以有两个方向
ab的上和下或者ab的左或右
[/Quote]

[Quote=引用 17 楼 Choi57671452 的回复:]
解有限,因为说好了是屏幕坐标,不像数学里面有小数出现。
只是“直线ac经过点a”,这不是废话吗,原题应该不是这样子的吧。
如果说“设c点在直线ac上并垂直于直线ab,并且c点与a点距离为m,”这样就不存在圆的情况,有两个解,也好办得多。
[/Quote]

[Quote=引用 25 楼 journeydj 的回复:]
....为什么是圆?
作标志有两个阿
c点在垂直于直线ab的线上,直线ac经过点a
[/Quote]
zxgs2007 2008-05-09
  • 打赏
  • 举报
回复
就是一个圆
levenwood 2008-05-09
  • 打赏
  • 举报
回复
只是圆上的一些轨迹,不是圆
xiaopengyoukexi 2008-05-09
  • 打赏
  • 举报
回复
这个问题本身就有很多问题:c点在垂直于直线ab的的线上是多余的.平面坐标上所有的点都过直线ab的一条垂直线.
这个问题可以很简单的看做是:求与a点距离为m的点的集合?这个是圆周的定义!!!!!!!!!!!
journeydj 2008-05-09
  • 打赏
  • 举报
回复
....为什么是圆?
作标志有两个阿
c点在垂直于直线ab的线上,直线ac经过点a
lsgy2008 2008-05-09
  • 打赏
  • 举报
回复
初中的?确定。。。。
okouver 2008-05-08
  • 打赏
  • 举报
回复
以a点为原点的圆,
但求坐标不可行,或者给出精度,求出离散量。
我姓区不姓区 2008-05-08
  • 打赏
  • 举报
回复
根据直线的两点式方程,可以知道ab的方程为(y-y1)/(y2-y1)=(x-x1)/(x2-x1),即其斜率为k=(y2-y1)/(x2-x1),ab中点坐标为((x1+x2)/2,(y1+y2)/2),根据点斜式方程可以知道ab中线方程为y-(y1+y2)/2=k(x-(x1+x2)/2)那么以a为圆点,m为半径的圆的方程为(x-x1)^2+(y-y1)^2=m^2那么求出它们相交或相切的点的坐标即可。
Choi57671452 2008-05-08
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 tianrui456 的回复:]
其实楼主的 "并且c点与a点距离为m"就说明它是个圆 只是其他的语句排除了圆于直线相交的两个点.....
[/Quote]

“设c点在垂直于直线ab的线上”

这两个点不可以排除哦。c在ab线上,也会存在一条穿过c的直线与ab垂直。
tianrui456 2008-05-08
  • 打赏
  • 举报
回复
其实楼主的 "并且c点与a点距离为m"就说明它是个圆 只是其他的语句排除了圆于直线相交的两个点.....
加载更多回复(18)

7,765

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧