[LISP]几何方式画出两任意曲线的之间的公切线
很多朋友说用LINE指令和 TAN(相切点)对象锁点画出两圆的公切线,我试了一下发现作出来不是公切线,因为将作出来的线延长会与圆相交,该线与两圆共有3个交点。所以我找到以下程序,可以画出任意两曲线之间的公切线。
; 绘制两曲线之间的公切线
<BR>(defun c:t2c ()<BR> (setq oldmode (getvar "osmode") ;存储原有的对象锁点与指令响应模式<BR> oldecho (getvar "cmdecho")<BR> )<BR> (setvar "osmode" 0) ;关闭对象锁点与指令响应<BR> (setvar "cmdecho" 0)
(setq p1 (getpoint "\nPick on the first curve: ")) ;在第一个切点附近点选一点<BR> (setq p2 (getpoint p1 "\nPick on the second curve: ")) ;在第二个切点附近点选一点<BR> <BR> (repeat 7<BR> ; 从 p1 画一条临时线到 p2 附近的曲线切点,取得新切点,然后删除临时线<BR> (command ".line" p1 (setq p3 (osnap p2 "tan")) "")<BR> (command ".erase" "L" "")<BR> (setq p2 p3)
; 从 p2 画一条临时线到 p1 附近的曲线切点,取得新切点,然后删除临时线<BR> (command ".line" p2 (setq p3 (osnap p1 "tan")) "")<BR> (command ".erase" "L" "")<BR> (setq p1 p3)<BR> )<BR> <BR> (command ".line" p1 p2 "") ;画出公切线
(setvar "osmode" oldmode)<BR> (setvar "cmdecho" oldecho)<BR> (princ)<BR>)
请大家试试^_^ 思路比较特别,值得参考。 TAN?
我不喜欢它,程序和画图里的情况有所不同。 应该说基本上达到相切的程度,这种思路是一种无限逼近法,当循环次越多越接近理论上的公切线。楼主提供的程序中重复7次也差不多了,应该还是比较理想的。 学无止境
页:
[1]