Zobrazit plnou verzi příspěvku: Maturitní práce v Lispu

Zauwi
29.01.2006, 09:52
Dobrý den,
chtěl bych se zeptat jestli někdo umí vysvětlit kreslení technických křivek v Cadu pomocí programu udělaným v Lispu?
(defun C:cyklo()  (setq r(getreal"poloměr tvořící kružnice:"))  (setq d(getreal"vzdálenost bodu:"))  (setq t1 -2)  (setq t2 4)  (setq int (/ (- t2 t1) 100.0))  (command "úsečka" "40,50" "400,50" "")  (setq a t1)  (setq x (-(* r a)(* d (sin a))))  (setq y (- r (* d (cos a))))  (setq x (+ x 40))  (setq y (+ y 50))  (command "bod" (list x y))  (repeat 250    (setq a (+ int a))    (setq x (-(* r a)(* d (sin a))))    (setq y (- r(* d(cos a))))    (setq x (+ x 40))    (setq y (+ y 50))    (command "úsečka" "@" (list x y) "")    )  (command "regen")  )
tohle je program na kreslení cykloidy,ale vůbec nevím jak se k tomu došlu.Příkazy znám ale nevim jak se v tomto případě postupuje.Myslím to ke vstahu k rovnicím přímek..mám ještě dělat hypocykloidu,epicykloidu,evolventu,archimedovu spirálu,a sinusovku...
 Zauwi2006-1-29 9:53:34

Seiner
29.01.2006, 12:17
1. Při zběžném pohledu na zaslaný kód mám jisté pochybnosti o jeho správnosti. Nechápu například, proč je rozsah úhlů stanoven od -2 do 4, proč je krok setina rozsahu, ale cyklus kreslení se opakuje 250x. Na detailní rozbor ale nemám čas.(nemýlím-li se, udávají se parametry goniometrických funkcí v lispu v obloukové míře).
2. Jinak ale postup obecně je triviální- zajistit si vstup parametrů úlohy,- nastavit případné konstanty a stanovit krok výpočtu- nakreslit tvořící prvky (např. úsečku a kružnici)- v cyklu vypočítat body křivky a průběžně je spojovat (v příkladu bylo použito spojování lomenou čarou z úseček)
3. Problémy může mít začátečník se sintaxí lispu - ze začátku je přepis z matematického vyjádření poněkud nepřirozený, ale to se při průměrném IQ rychle poddá.Příklad: lisp :(setq x (-(* r a)(* d (sin a))))              matematicky: x=r*a-d*sin(a)(což je mimochodem právě x-ová souřadnice bodu cykloidy s poloměrem tvořící kružnice r a vzdáleností tvořícího bodu d od středu při odvalení o úhel a)
4. Všimnul jsem si, že stejně jako já, má většina účastníků této konference jisté výhrady přerůstající až v odpor ke zpracovávání domácích úkolů pro "vyčůrané" studenty. Myslím, že každý rád poradí zvídavému mladému muži v konkrétním problému, ale nečekejte, že vám to někdo tady napíše. Účastníci této konference jsou většinou lidé z praxe a vědí, jaké budoucí mladé kolegy a nástupce by chtěli. Takové, kteří si dokážou sehnat informace a s problémem se poprat.

Seiner
29.01.2006, 12:45
Pokusím se o okomentování:
(defun C:cyklo() ;příkaz definice uživatelské funkce cyklo  (setq r(getreal"poloměr tvořící kružnice:")) ; vstup a přiřazení poloměru  (setq d(getreal"vzdálenost bodu:")) ; vstup a přiřazení d  (setq t1 -2) ; nastavení počátečního úhlu - já bych tam dal asi 0  (setq t2 4) ; nastavení koncového úhlu - já bych tam dal 2*PI  (setq int (/ (- t2 t1) 100.0)) ; nastavení kroku výpočtu  (command "úsečka" "40,50" "400,50" "") ;nakreslení odvalovací úsečky  (setq a t1) ;nastavení úhlu na dolní mez  (setq x (-(* r a)(* d (sin a)))) ;výpočet x-ové souřadnice prvního bodu  (setq y (- r (* d (cos a)))) ;výpočet y-ové souřadnice prvního bodu  (setq x (+ x 40)) ; posunutí x-ové souřadnice vzhledem k nakreslené odvalovací úsečce  (setq y (+ y 50)) ; dtto pro y  (command "bod" (list x y)) ;nakreslení bodu  (repeat 250 ;začátek cyklu (ale proč 250?)    (setq a (+ int a)) ;zvětšení úhlu o nastavený přírustek    (setq x (-(* r a)(* d (sin a)))) ; výpočet x-ové souřadnice    (setq y (- r(* d(cos a)))) ;výpočet y-ové souřadnice    (setq x (+ x 40)) ;posunutí (asi pro názornost rozepsáno do 2 příkazů)    (setq y (+ y 50)) ; posun y    (command "úsečka" "@" (list x y) "") ;nakreslení úsečky z předchozího bodu do aktuálního    ) ;konec cyklu  (command "regen") ;regenerace "pro jistotu"  ) ;konec definice funkce
 
Jinak kód je značně jednoduchý a nijak neošetřuje chybové stavy. Odvalovací úsečku bych asi kreslil radši podle zadaného poloměru kružnice.A ještě poznámka. Až budete psát pro další křivky, uvědomte si, že AutoCAD umožňuje zadání bodů v polárních souřadnicích a pro některé křivky jsou rovnice v polárním vyjádření jednodušší.Seiner2006-1-29 12:50:5

Zauwi
30.01.2006, 13:07
Děkuju za důkladný rozbor.Nechtěl jsem,aby mi tu práci někdo
napsal,spíš mi šlo o to,jestli je tu někdo,kdo by mi byl ochotný s tím
poradit.potřeboval bych něco jako postup....při psaní kodu...napadlo
mě,že budu muset asi postupovat stejně jako kdybych to kreslil na
papír...?
Kdyby jste mi  třeba poradil do začátku,byl bych Vám vděčný.

Seiner
30.01.2006, 13:14
Jenže já už opravdu nevím, co by mohlo být návodnější, než okomentovaný kód.Jestli chcete postup tak asi:
1. Zjistit si definici kreslené křivky a její rovnice (nejlépe) v parametrickém tvaru.
2. Rozhodnout o vstupních parametrech úlohy, případně o konstantách a rozsahu řešení.
3. Modifikovat vzorovou úlohu.

Zauwi
30.01.2006, 13:39
Díky pokusím se o to...dám vědět jak to dopadlo