作者LPH66 (-858993460)
看板Prob_Solve
标题Re: [问题] 请问三点共线
时间Mon Apr 18 03:42:33 2011
※ 引述《chchwy (mat)》之铭言:
: Point a,b,c;
: int pos = a.x*b.y + b.x*c.y + c.x*a.y;
: int neg = a.x*c.y + b.x*a.y + c.x*b.y;
: if(pos==neg) {
: // They're on the same line
: }
: 请问,我在网路上看到这种做法,可以判断三点共线。
: 但是我不太明白为什麽可以这样做?
: 我个人猜测应该是跟外积有关系
: 但是式子又推不出来 冏
我觉得他用的是简单多边形的有号面积公式:
1 | p1.x p2.x pn.x p1.x |
--- | ... |
2 | p1.y p2.y pn.y p1.y |
pos - neg 正好是这个式子的两倍 (就是那个很行列式的那一块)
那麽三点共线 <==> 面积为 0 <==> pos == neg
应该是这麽想来的....
(这样也比较能理解为什麽这两个暂时变数要取名叫 pos 和 neg
因为根本就是这个式子的正项和负项)
不然如果真的是用前面的计算的话 正如 tkcn 说的不如直接写 cross(...)
--
"LPH" is for "Let Program Heal us"....
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.131
※ 编辑: LPH66 来自: 140.112.30.131 (04/18 03:43)
1F:推 tkcn:有道理! 04/18 09:43
2F:推 chchwy:原来如此 感谢您的解说 04/18 18:54