[LISP]怎样判断三点共线
怎样判断三点共线 <P>斜率,判断是否相等,(x1-x2)/(y1-y2)=(x3-x1)/(y3-y1)</P> <P>斜率判断法<BR>这个式子不适用于 y1 = y2 = y3 的情况</P><P>三点不共线则成三角形</P>
<P>a. 两边之和大于第三边<BR>b. 面积不为零</P>
<P>要考量/排除同一点位值的情况</P>
<P> </P> <P><A href="http://bbs.mjtd.com/forum.php?mod=viewthread&tid=48974" target="_blank" >http://bbs.mjtd.com/forum.php?mod=viewthread&tid=48974</A></P>
<P>参见几何算法中矢量叉积和折线拐向的问题可以解决</P> <P>(= (angle pt1 pt2) (angle pt1 pt32))</P>
<P> </P>
<P> </P> <P>三点所组成的三角形面积等于零。</P>
<P>X1(y2-y3)+x2(y3-y1)+x3(y1-y2)=0</P> <P>(< (abs (sin (- (angle pt1 pt2) (angle pt2 pt3)))) diff)</P>
<P>diff为允许误差,其值约为角度的弧度差值</P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes"><FONT face="Times New Roman"> <SPAN style="FONT-SIZE: 14pt; mso-bidi-font-size: 12.0pt"><SPAN style="mso-spacerun: yes"> </SPAN><SPAN style="mso-spacerun: yes"> </SPAN>很容易判断,假设p1,p2是一条直线的两点,p3是任意一点,三点之间构成的边长长度分别为L_p1p2,L_p1p3,L_p2p3,(总长)三边之和为L_3p,其中最大的一条边为L_max,则判断如下:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 28.5pt">1、如果3点均在一条线上,那么最长的一条边应等于两条短边之和。<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 28.5pt">(=<SPAN style="mso-spacerun: yes"> L_max (* L_3p 0.5))<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 28.5pt">2、如果点p3在直线p1,p2之间,那么直线的长度L_p1p2必然是最大一条边L_max。<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 28.5pt">(=<SPAN style="mso-spacerun: yes"> L_p1p2 L_max)<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"></FONT></SPAN></SPAN></P> 用向量叉积 用长度判断,3点3个长度,如果2个短的等于长的就是共线,或者只要任意2个等于1个就是共线。
页:
[1]