Zobrazit plnou verzi příspěvku: Jak na průsečík přímek v autolispu

hans125
06.04.2006, 22:37
Zdravím, chtěl jsem se zeptat, jak v autolispu dostanu průsečík dvou přímek (nebo přímky a úsečky). Někde jsem našel, že by to měl dělat příkaz INTERS. V přiloženém kódu jsem zkoušel následující příkaz: (setq bodr (INTERS bod9 bod11 bod1 bod4)). Bod9 a bod11 leží na jedné přímce a bod1 a bod4 na druhé přímce. Ale nevypíše mi to průsečík. Nevíte, v čem by mohla být chyba?
Prográmek níže má sloužit k vykreslení krychle a proložit rovinu řezu- není to celý dokončený..
 
 
 
(defun krychle() (setq a(getreal "Zadej délku hrany krychle: ")) (setq bod1 (getpoint "Zadej počáteční bod: "))
 
 (setq x1 (car bod1)) (setq y1 (cadr bod1)) (setq z1 (caddr bod1)) (setq x2 (+ x1 a)) (setq y2 (+ y1 a)) (setq z2 (- z1 a))
 
 (setq x3 (+ x2 (/ a 2))) (setq X4 (+ x1 (/ a 2))) (setq z3 (- z1 (/ a 2)))
 
 (setq bod2 (list x2 y1 z1)) (setq bod3 (list x2 y1 z2)) (setq bod4 (list x1 y1 z2)) (setq bod5 (list x1 y2 z1)) (setq bod6 (list x2 y2 z1)) (setq bod7 (list x2 y2 z2)) (setq bod8 (list x1 y2 z2))
 
 (setq bod9 (list x3 y1 z1)) (setq bod10 (list x4 y2 z3)) (setq bod11 (list x4 y1 z3))
 
 (setq bodr (INTERS bod9 bod11 bod1 bod4)) (setq x5 (car bodr)) (setq z5 (caddr bodr)) (setq bodz (list x5 y2 z5))   (command "_line" bod1 bod2 bod3 bod4 "") (command "_line" bod5 bod6 bod7 bod8 "") (command "_line" bod1 bod5 "") (command "_line" bod8 bod4 "") (command "_line" bod2 bod6 "") (command "_line" bod3 bod7 "") (command "_line" bod1 bod4 "") (command "_line" bod5 bod8 "")
 
 (command "_xline" bod9 bod11 "") (command "_rectang" bod9 bodz "")
 
)

vknop
06.04.2006, 23:50
[QUOTE=hans125]
Nevíte, v čem by mohla být chyba?
[/QUOTE]
 
Úsečky [bod9, bod11] a [bod1, bod4] se neprotínají, resp. protínají se mimo a průsečík tak neleží na obou současně.
Musíte použít i 5. argument funkce.
viz. help
"onseg
If specified as nil, the lines defined by the four pt arguments are considered infinite in length. If the onseg argument is omitted or is not nil, the intersection point must lie on both lines or inters returns nil."

Vladimír Michl
07.04.2006, 07:44
Ano, stačí přidat 5. parametr: 'T
Podívejte se také na funkci vla-IntersectWith