算法请教
p1,p2,p3各点的坐标已知道,如何判定p3处于p1p2的垂直范围内,如图所示意。我的算法是,计算出来p3-p1-p2所在角的角度a和p1p3的长度,如果角度<直角,长度小于p1p2长度/tan(a),觉得这样的算法很繁代码也不少,相信有更好的算法。
如果再进一步,将p1p2更改为半径为r的圆弧,则如何处理?
<P3P1P2和<P3P2P1都为锐角 只要点 P1,P2, P3,在一个圆周上即说明<p1p3p2是直角,如果用计算的方法那可以用,<p3p1p2 + <p3p2p1=90度来做判断,凡是满足这个条件的点,都是符合你的要求的 2楼的才正确,两个角都应该是锐角 abs(p1p3^2+p2p3^2-p1p2^2)<delta
delta是一个小数字,不取0是为了忽略浮点误差带来对运算的影响 可以先成立新的坐标系即以P1点为原点,P1P2(矢量,有方向)为Z轴,而而垂直于P1P2且过P1点的平面为XY平面.计算P3点在新坐标系中坐标,计算P2点在新坐标系中坐标.若P3点Z值在P1P2两点的Z值之间则符合条件 <p><font style="BACKGROUND-COLOR: #cce8cf;">我认为是这样</font></p><p><font style="BACKGROUND-COLOR: #cce8cf;">以P1 P2中点为圆心,P1P2为直径作圆,如果P3在圆上,则角为直角</font></p><p></p> 本帖最后由 作者 于 2007-2-22 18:00:20 编辑 <br /><br /> 要判断<P1P3P2是不是直角?这还不简单啊!三点的坐标都知道了!算法如下:<br/>求出P1P2连线的中点O坐标,if 线段OP3的长度=0.5X线段P1P2的长度 then <P1P3P2是直角,很简单的啊!不知道搂主是不是这个意思? <p>那么复杂干吗?很简单的啊.3点坐标已知的情况下</p><p>用getangle 函数2次,取得线段p3p1 & p3p2的角度.</p><p>两个相减的abs =pi/2 or 3*pi/2</p><p>几步就能得到结果.</p> <p>倒是想问有没有倒角的算法,两条任意连接直线的倒角,半径为R <直线长度。</p><p></p><p>另外想请教高手对块explore以后怎么在cad中显示explore后的东西?</p><p>难道是在modelspace里面additem? 然后delete block?</p>
页:
[1]
2