ntchjie 发表于 2004-11-19 15:16:00

算法请教

p1,p2,p3各点的坐标已知道,如何判定p3处于p1p2的垂直范围内,如图所示意。


我的算法是,计算出来p3-p1-p2所在角的角度a和p1p3的长度,如果角度<直角,长度小于p1p2长度/tan(a),觉得这样的算法很繁代码也不少,相信有更好的算法。


如果再进一步,将p1p2更改为半径为r的圆弧,则如何处理?

雪山飞狐_lzh 发表于 2004-11-19 15:18:00

<P3P1P2和<P3P2P1都为锐角

stulsx 发表于 2005-4-21 10:23:00

只要点 P1,P2, P3,在一个圆周上即说明<p1p3p2是直角,如果用计算的方法那可以用,<p3p1p2 + <p3p2p1=90度来做判断,凡是满足这个条件的点,都是符合你的要求的

ljpnb 发表于 2005-4-21 10:46:00

2楼的才正确,两个角都应该是锐角

bolow 发表于 2005-4-21 15:20:00

abs(p1p3^2+p2p3^2-p1p2^2)<delta


delta是一个小数字,不取0是为了忽略浮点误差带来对运算的影响

cbse_smy 发表于 2005-5-6 16:31:00

可以先成立新的坐标系即以P1点为原点,P1P2(矢量,有方向)为Z轴,而而垂直于P1P2且过P1点的平面为XY平面.计算P3点在新坐标系中坐标,计算P2点在新坐标系中坐标.若P3点Z值在P1P2两点的Z值之间则符合条件

xiaoxue3850 发表于 2007-2-13 16:09:00

<p><font style="BACKGROUND-COLOR: #cce8cf;">我认为是这样</font></p><p><font style="BACKGROUND-COLOR: #cce8cf;">以P1 P2中点为圆心,P1P2为直径作圆,如果P3在圆上,则角为直角</font></p><p></p>

laoliu09 发表于 2007-2-22 15:19:00

本帖最后由 作者 于 2007-2-22 18:00:20 编辑 <br /><br /> 要判断&lt;P1P3P2是不是直角?这还不简单啊!三点的坐标都知道了!算法如下:<br/>求出P1P2连线的中点O坐标,if 线段OP3的长度=0.5X线段P1P2的长度 then &lt;P1P3P2是直角,很简单的啊!不知道搂主是不是这个意思?

xxxtttxxx 发表于 2007-7-26 23:29:00

<p>那么复杂干吗?很简单的啊.3点坐标已知的情况下</p><p>用getangle 函数2次,取得线段p3p1&nbsp; &amp; &nbsp;p3p2的角度.</p><p>两个相减的abs&nbsp;&nbsp; =pi/2 or 3*pi/2</p><p>几步就能得到结果.</p>

xxxtttxxx 发表于 2007-7-27 18:42:00

<p>倒是想问有没有倒角的算法,两条任意连接直线的倒角,半径为R&nbsp; &lt;直线长度。</p><p></p><p>另外想请教高手对块explore以后怎么在cad中显示explore后的东西?</p><p>难道是在modelspace里面additem? 然后delete block?</p>
页: [1] 2
查看完整版本: 算法请教