Per fare un esempio più pratico questa ellisse deve essere perfettamente
inscritta in un parallelogramma il quale ha i lati più lunghi parallelo
all'asse X e i lati obliqui paralleli tra di loro con inclinazione casuale
(per semplicità 30 gradi).
I "snap quadrante" dell'ellisse devono quindi coincidere con i punti medi
dei lati del parallelogramma (o almeno penso); sicuramente nessuna parte
dell'ellisse deve fuoriuscire dal parallelogramma.
Ho provato a disegnare questa ellisse come approssimazione di archi, ma è un
casino calcolarsi i punto intermedi dei vari archi. Se in AutoCAD non si può
fare c'è qualche LISP in rete...
Spero di essere stato abbastanza chiaro.
Ringrazio tutti in anticipo.
Ciao
--
Emiliano - Webmaster di EmiCAD® - Tutto per AutoCAD e IntelliCAD
e-mail: webm...@emicad.it
web: www.emicad.it
Un modo potrebbe essere questo : (trovare un LISP belle e fatto, sarebbe
meglio)
1 - disegna due rettangoli rispettivamente su una base base e su un lato
2 - con l`aiuto dello snap "mid" disegna in questi rettangoli due elissi (
comando elisse)
3 - dividi il perimetro degli elissi per 20 ( o quello che vuui basta che
sia multiplo di 4)
4 - traccia una linea che passi dal centro di ogni elisse e che arrivi
perpendicolare al lato e alla base del del roboide .
5 - con il comando copia multiplo copia questa linea su ciascun punto della
divisione che ai precedentemente ottenuto
6 - partendo dalle intersezioni creatosi fra le linee e i lati del
parallelepipedo crea una griglia i cui punti ti servono per tracciare una
polilinea ( deve essere una polilinea chiusa)
7 - con il comando "edit polilinea" seleziona + " fit curve")
se ti serve potrei mandarti un esempio ( DWG)
ciao
Var
Mandami il disegno, vedo se posso fare io un LISP...
Ciao e grazie
Praticamente un'ellisse inscritta in un parallelogramma è la proiezione
prospettica di una circonferenza inscritta in un quadrato, non ho sottomano
le regole dell'omologia o comunque un libro di geometria descrittiva, ma
credo che tu possa ricavarla ricostruendo il percorso inverso...
diversamente fatti un cerchio in quadrato li metti in prospettiva finchè non
tornano giusti come servono a te e stampi su dxb. Sò che non sono molto
pratici come consigli...
Ciao la soluzione potrebbe essere valida, ma dovrei disegnare centinaia di
ellissi diverse, e utilizzare questo procedimento richiederebbe troppo
tempo.
Quello che mi occorrerebbe a questo punto è proprio qualche formula
matematica/geometrica, in grado di calcolare l'ellisse prospettica.
Ciao e grazie comunque.
> Quello che mi occorrerebbe a questo punto è proprio qualche formula
> matematica/geometrica, in grado di calcolare l'ellisse prospettica.
Ragionandoci, un quadrato in prospettiva diventa un trapezio, quindi la tua
ellisse dovrebbe essere inscritta in un trapezio isoscele,
Vediamo un po' dovresti scrivere l'equazione di un'ellisse poi occorre
mettere che è tangente a 2 rette e che si conosce l'asse minore
(la dist tra le due rette orizzontali cui è tangente) allora:
ax² + bxy + cy² + dx + ey + f = 0 (eq conica)
é un'ellisse se: b² - 4ac < 0
e le condizioni di tangenza... insomma servono 6 condizioni.. e poi non mi
ricordo più perchè è tanto tempo che ho fatto geometria... ;-PP
Non esattamente, la prospettiva o assonomitria (faccio sempre confusione) di
un quadrato per me deve essere un parallelogramma.
Se vuoi ti mando un DWG per farti capire meglio il problema.
Sto cercando di realizzare un LISP ma è un grande casino!! e mi serve
assolutamente per Giovedi.
Ciao e grazie
Ciao
--
Emiliano - Webmaster di EmiCAD® - Tutto per AutoCAD e IntelliCAD
e-mail: webm...@emicad.it
web: www.emicad.it
(defun c:emielli ()
;*************************************
(setq var (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq old-error *error*)
(defun *error* (msg)
(setq messaggio (strcat "EmiLISP ha riscontrato il seguente errore: "
msg))
(princ messaggio)
(setq *error* old-error)
(command "_undo" "_end" "_u")
(exit)
)
(command "_undo" "_be")
(setq SNAPCORR (getvar "OSMODE"))
;*****************************
(setq nprec 20) ;precisione dell'ellisse, deve essere un numero pari
(setq listapunti nil)
(setq p1 (getpoint "\nInizio del del primo asse dell'ellisse: "))
(setq p2 (getpoint p1 "\nFine del del primo asse dell'ellisse: "))
(setq p3 (getpoint "\nInizio del del secondo asse dell'ellisse: "))
(setq p4 (getpoint p3 "\nFine del del secondo asse dell'ellisse: "))
(setvar "OSMODE" 0)
(setq pA (polar p3 (angle p1 p2) (/ (distance p1 p2) 2)))
(setq pB (polar p4 (angle p1 p2) (/ (distance p1 p2) 2)))
(setq pC (polar p4 (- (angle p1 p2) pi) (/ (distance p1 p2) 2)))
(setq pD (polar p3 (- (angle p1 p2) pi) (/ (distance p1 p2) 2)))
(setq pint (inters p1 p2 p3 p4 nil))
(setq l (/ (distance pA pB) (* nprec 2)))
(setq b (/ (distance pint p2) nprec))
(setq SL l)
(setq SB b)
(setq pX (polar pA (angle pA pB) sL))
(setq pY (polar pint (angle p1 p2) SB))
(setq PV (inters p3 pX p4 pY nil))
(setq listapunti (append listapunti (list PV)))
(repeat nprec
(setq sL (+ sL l))
(setq sB (+ sB b))
(setq pX (polar pA (angle pA pB) sL))
(setq pY (polar pint (angle p1 p2) sB))
(setq PV (inters p3 pX p4 pY nil))
(setq listapunti (append listapunti (list PV)))
)
(setq SB b)
(repeat nprec
(setq sL (+ sL l))
(setq sB (+ sB b))
(setq pX (polar pA (angle pA pB) sL))
(setq pY (polar p2 (angle p2 p1) sB))
(setq PV (inters p3 pY p4 pX nil))
(setq listapunti (append listapunti (list PV)))
)
(setq SL l)
(setq SB b)
(setq pX (polar pC (angle pC pD) sL))
(setq pY (polar pint (angle p2 p1) sB))
(setq PV (inters p4 pX p3 pY nil))
(setq listapunti (append listapunti (list PV)))
(repeat nprec
(setq sL (+ sL l))
(setq sB (+ sB b))
(setq pX (polar pC (angle pC pD) sL))
(setq pY (polar pint (angle p2 p1) sB))
(setq PV (inters p4 pX p3 pY nil))
(setq listapunti (append listapunti (list PV)))
)
(setq SB b)
(repeat nprec
(setq sL (+ sL l))
(setq sB (+ sB b))
(setq pX (polar pC (angle pC pD) sL))
(setq pY (polar p1 (angle p1 p2) sB))
(setq PV (inters p4 pY p3 pX nil))
(setq listapunti (append listapunti (list PV)))
)
(command "polilinea")
(foreach p listapunti (command p))
(command)
;fine procedura
(setvar "OSMODE" SNAPCORR)
(setq *error* old-error)
(command "_undo" "_end")
(setvar "cmdecho" var)
(princ)
)
Ciao
(command "_pline")
> Ciao, ho trovato come risolvere graficamente l'ellisse prospettica con
> l'utilizzo delle tangenti e sono quindi riuscito a sviluppare questo LISP
> che mi sembra funzionare molto bene!!
> Il comando non fa altro che approssimare un'ellisse con una polilinea
> passante per i suoi punti
> Fammi sapere che te ne sembra...
Complimenti!
Davvero buono, e decisamente migliore del comando ellisse di acad. (alla
fine ho capito, a te serviva un'ellisse in assonometria).
Ciao.