Spirala Archimedesa

Przykład posłuży rysowaniu spirali jak na poniższym rysunku

rysowanie spirali

Spirala będzie składała się z punktów. W przykładzie posłużymy się parametrami ustawionymi na stałe, oczywiście można je modyfikować i dodać możliwość określania parametrów przez Użytkownika.


 (vl-load-com)
(setq *ZWCAD* (vlax-get-acad-object))
(setq *Rysunek* (vla-get-activedocument *ZWCAD*))
(setq *Model* (vla-get-Modelspace *Rysunek*))
(defun d2r (degs /)
;----------------------------------------------------------
;funkcja zamienia wartość kąta zapisaną w stopniach na jej odpowiednik w radianach
;Argumenty: liczba, wartość kąta w stopniach
;Wynik: liczba, wartość kąta w radianach
;----------------------------------------------------------
(/(* pi degs)180.0)
)

(defun CalSpirala (P0 Skok IloscZwojow dokladnosc / katrad kat R IleKrokowWSkoku RKrok IleZwojow Px )
;----------------------------------------------------------
;funkcja oblicza współrzędne punktów wzdłuż spirali archimedesa
;Argumenty: P0 - Punkt środkowy spirali,
; Skok - Odległość pomiędzy poszczególnymi zwojami
; IloscZwojow - Ilość zwojów spirali
; dokładność - kąt pomiędzy kolenymi punktami
;Wynik: lista współrzędnych punktów wzdłuż kształtu spirali.
;----------------------------------------------------------
(setq katrad (d2r dokladnosc )) ; zamiana kąta w stopniach na radiany
(setq kat 0 )
(setq R 0 )
(print (setq IleKrokowWSkoku (/ 360 dokladnosc)) )
(print (setq RKrok (/ (float Skok) IleKrokowWSkoku )) )
(setq Wynik (list ) )
(repeat IloscZwojow
(repeat IleKrokowWSkoku
(setq R (+ R RKrok))
(setq Px(polar P0 kat R)) ; oblicza współrzędne punku odsuniętego od punktu początkowego pod zadanym kątem i w określonej odległości.
(setq Wynik (append Wynik (list Px) ))
(setq kat (+ kat katrad ))

)
)
Wynik
)
(defun C:Spirala ( / Skok IleZwojow dokladnosc )
;----------------------------------------------------------
;funkcja rysuje poliinię wzdłuż spirali archimedesa
;Argumenty: brak
;Wynik: brak
;----------------------------------------------------------

(setq Skok 5)
(setq IleZwojow 10 )
(setq dokladnosc 3 ) ; podana w stopniach
(setq P0 (getpoint "Wskaż punkt środkowy"))
(setq Punkty (CalSpirala P0 skok IleZwojow dokladnosc))
(setq i 0)

(repeat (length Punkty )
(vla-addPoint *Model* (vlax-3d-point (nth i Punkty )))
(setq i (1+ i) )
)
(print )
)

Wykonanie w ZWCAD 2015+LISP Spirala 2015