Тема: Касательная в Акаде

Кто нибудь решал программно задачу нахождения точки на кривой (сплайн, дуга и т.п.) в которой касательная проходит под заданным углом?

Re: Касательная в Акаде

Когда-то и мне нужно было решить этк задачу прислали эти проги под Акад 14. Пробуй:
(defun angleout ()
(setvar "OSMODE" 0)
(setvar "OSMODE" 1)
(setq b1 nil
name9 nil)
(setq a1 (getpoint "Указать точку привязки")
xa (nth 0 a1)
ya (nth 1 a1)
a2 (ssget a1)
)
(if (/= a2 nil)
(progn
(setq a21 (ssname a2 0)
a3 (entget a21)
dx1 (assoc 0 a3)
name9 (cdr dx1)
b1 name9
)
)
)
(cond ((= name9 "INSERT") (loadstr))
((= name9 "LINE") (loadline))
((= name9 "ARC") (loadkurve))
((= name9 nil) (setq ALFA1 0))
)
)

(defun loadkurve ()
; запиcь с координатами центра дуги (код 10)
(setq dx1 (assoc 10 a3))
(setq d94 dx1
d944 (cdr d94)
d944x (nth 0 d944)
d944y (nth 1 d944)
)
; запиcь со значением радиуса (код 40)
(setq dx1 (assoc 40 a3))
(setq d84 dx1
d844r (cdr d84)
)
; запиcь со значением начального угла поворота (код 51)
(setq dx1 (assoc 51 a3))
(setq dbetax dx1
dbeta1 (cdr dbetax)
)
; запиcь со значением конечного угла поворота (код 50)
(setq dx1 (assoc 50 a3))
(setq dbetay dx1
dbeta2 (cdr dbetay)
)
(setq XNK (+ d944x (* d844r (cos dbeta1)))
YNK (+ d944y (* d844r (sin dbeta1)))
XKK (+ d944x (* d844r (cos dbeta2)))
YKK (+ d944y (* d844r (sin dbeta2)))
XWU (+ d944x (* d844r (cos (/ (+ dbeta1 dbeta2) 2))))
YWU (+ d944y (* d844r (sin (/ (+ dbeta1 dbeta2) 2))))
)
(ugol9 xa ya XWU YWU)
(print (grad ALFA1))
)