使用AutoLisp畫橢圓
AutoCAD本身就有提供畫橢圓的功能,但是並沒有提供橢圓上各點的座標,若要銑削時,就要自行求得橢圓上各個點的座標。
本文旨在以AutoLisp語言來求得橢圓上各點的座標,並以AutoLisp畫出橢圓,以應證求得的橢圓上各點的座標是否正確。
橢圓有長軸跟短軸,假設長軸之半為a,短軸之半為b,則座標( a*cos(k1), b*sin(k1) )為橢圓上的一點,其結構如下圖所示:
據此資料來做橢圓圖時,則可得下列lisp程式:
(defun c:kk( / x1 y1 x2 y2 )
(setvar "osmode" 0)
(command "color" "bylayer")
(setq xc 0.0 yc 0.0 )
(setq pc (getpoint "Enter the center point of the ellipse. : "))
(setq xc (car pc) yc (cadr pc))
(setq a0 (getreal "\nEnter the longer axial length a. : <100> ") )
(if (or (= a0 "")(= a0 nill))
(setq a0 50.0)
(setq a0 (/ a0 2)) )
(setq b0 (getreal "\nEnter the shorter axial length b. : <50> ") )
(if (or (= b0 "")(= b0 nill))
(setq b0 25.0)
(setq b0 (/ b0 2)) )
(setq i1 1 x1 0.0 y1 0.0 x2 0.0 y2 0.0 )
(setq unitAng (/ 3.1415926 180.0) wkAng 0)
(while (< i1 362)
(setq wkAng (+ wkAng unitAng))
(setq x2 (+ xc (* a0 (cos wkAng))))
(setq y2 (+ yc (* b0 (sin wkAng))))
(if(> i1 1.5)
(command "line" (list x1 y1)(list x2 y2) "") )
(setq x1 x2 y1 y2 i1 (+ 1 i1))
)
)
上面的AutoLisp是以作圖角方法來求得橢圓座標,但是該橢圓角(橢圓座標與橢圓中心的夾角)並不等於作圖角(請參考上圖),若要改以:在橢圓上每隔1度之橢圓角來求一個橢圓上的點座標,則AutoLisp更改如下:
(defun c:kk( / x1 y1 x2 y2 )
(setvar "osmode" 0)
(setq xc 0.0 yc 0.0 )
(setq pc (getpoint "Enter the center point of the ellipse. : "))
(if (or (= pc "")(= pc nill))
(setq pc (list 0 0 0)))
(setq xc (car pc) yc (cadr pc))
(setq a0 (getreal "\nEnter the longer axial length a. : <100> ") )
(if (or (= a0 "")(= a0 nill))
(setq a0 50.0)
(setq a0 (/ a0 2)) )
(setq b0 (getreal "\nEnter the shorter axial length b. : <50> ") )
(if (or (= b0 "")(= b0 nill))
(setq b0 25.0)
(setq b0 (/ b0 2)) )
(setq i1 1 x1 0.0 y1 0.0 x2 0.0 y2 0.0 )
(setq unitAng (/ 3.1415926 180.0) wkAng 0 eAng 0.0)
(while (< i1 91)
(setq wkAng (+ wkAng unitAng))
(setq eAng (atan (/ (* b0 (sin wkAng)) (* a0 (cos wkAng)))))
(setq x2 (+ xc (* a0 (cos eAng))))
(setq y2 (+ yc (* b0 (sin eAng))))
(if(> i1 1.5)
(command "line" (list x1 y1)(list x2 y2) "") )
(setq x1 x2 y1 y2 i1 (+ 1 i1))
)
)
到底要每隔多少角度來求一個橢圓座標才是適當的呢?角度太小則座標離得太近,若低於0.001mm,則CNC控制器無法讓機台移動,若是太大,則橢圓誤差大,一般較佳的方式並不是用角度當做重算間隔,而是以限定最大弦誤差的方式來當做重算間隔,弦誤差如下圖所示,此外,若要以銑刀來銑橢圓,還得考慮刀具半徑的偏置問題,http://tw.myblog.yahoo.com/cu01joe/article?mid=357&prev=362&next=341&l=f&fid=9,若是手寫程式,則以G41或G42行之則較簡便,使用上要注意初始的補正漸入及最後的補正漸出那兩個單節,不然極易過切或少切,請參考http://tw.myblog.yahoo.com/cu01joe/article?mid=429&prev=467&next=400&l=f&fid=9,若是用CAD/CAM的方法,則直接算出偏置點為之 。
留言
張貼留言