作者RogerKao (RK)
看板C_Sharp
标题[问题] 如何求点是否在线段上
时间Fri Aug 12 03:01:56 2016
各位大大晚安,小弟第一次在板上PO文,如有冒犯还请见谅。
小弟有一问题相问:
问题是关於直线段连线的问题,以下所有线段、连线都是rectilinear的
假设目前已知存在某线段(即知其头尾座标)
例如(0,10)->(10,10),其中(10,10)为可连接之端点
接着我有一点(7,6),想求此点连线到该线段或是该端点的最短距离
就会有两个连法,第一个连法就是直接垂直往上连到(7,10)
第二个连法就是往右边画线到(10,6)再往上连到(10,10),而产生两段线段。
当然我可以直接看出(7,6)->(7,10)走的距离比较短。
但我怎麽判断走到(7,10)之後,线段不会再往右边连到(10,10)?
也就是我如何判断我的中继点已经在已知线段上,而不再继续连线?
我是有想到一个方法就是判断欲连接点(7,6)之X值是否在第一线段之X值范围内
即 0 <= 7 <= 10,若是则可直接垂直连至线段Y=10上,但总觉得应该有更好
的方式,因为这样我线段数一多的时候判断式似乎就更加复杂了。
因为一旦第二个点连至第一个点或第一个点产生之线段之後,其第二个点或其线段也会
变成下一个点可连接之选择。
叙述不佳的话还请各位大大见谅!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.42.12.120
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1470942120.A.36D.html
※ 编辑: RogerKao (114.42.12.120), 08/12/2016 03:03:45
1F:→ Litfal: x0<=x && x<=x1 && y0<=y && y<=y1 08/12 10:35
2F:→ RogerKao: 感谢楼上回答,这我刚有想到,不知道是否还有其他方法? 08/12 20:27
3F:→ MOONY135: 你的到线段跟到端点距离是想要怎样取舍? 08/12 23:06
不太懂楼上的问题是什麽,我觉得我把问题在叙述清楚一点好了,
我整个问题是想要把很多点用直线连起来,想要连短的,但是不拘限於要点跟点直接连线
也就是我可以增加新的节点(Stenier point)
假设今天第一个点在(10,10) 他连到了(0,10)
那这个线段就是可连接的线段,也就是说现在新的点(7,6)的可连接选择为
(10,10) 这个点或者是(0,10)到(10,10)这条线段。
因为我要求最短又是直线,所以人去看就是(7,6)直接往上连就结束了。
但假设我又有一个点是(12,8) 由於他X值比较大所以他可怜的最短距离应该是经由
中继点(10,8)然後再连到(10,10)而不是去连 (0,10)到(10,10)这条线段。
所以我的问题是,我要怎麽判断我下一个点是可以直接连线到原有点或线段
还是要会走L型去连到原有点或线段。
------------------------------x P1(10,10)
x P3(12,8)
x P2(7,6)
当然我已经知道我可以藉由判断 x值是否在原有线段的范围内 就如同一楼所说的
这样我就可以直接连直线过去,我想知道的是有没有其他方法去做判断?
感谢各位热心的回覆。
※ 编辑: RogerKao (114.42.12.120), 08/13/2016 00:18:32
4F:→ MOONY135: 1.直角公式 A^2 + B^2 = C^2 2.三角形给三个边算角度 08/13 17:52
5F:→ RogerKao: 感谢楼上大大热心解答! 08/16 23:26