Está en la página 1de 1

;TRAZA UNA CATENARIA ENTRE DOS PUNTOS

(defun c:cate( / p1 p2 p3 pe te escy a a2 x1 y1 in ym v x y)


; *** versin 2000
;*** PIDE DATOS ***
(setq p1(getpoint "punto izquierdo : "))
(setq p2(getpoint "punto derecho : "))
(setq pe(getreal "peso del conductor Kg/m <0.189> : "))
(if (null pe) (setq pe 0.189))
(setq te(getreal "tension del conductor en Kp : "))
(setq escy(getreal "Factor de escala Y respecto de X : "))
;*** CALCULA DISTANCIA Y ANGULO ***
(setq p3(list (car p2) (cadr p1))) ; p2 en horizontal
(setq a(distance p1 p3)) ; distancia horizontal
(setq a2(/ a 2)) ; mitad
(setq ym(/ (* a2 a2 pe) (* 2 te))) ; max. flecha en a/2
(setq x1(car p1) y1(cadr p1))
(setq v(- (angle p2 p1) (angle p3 p1)))
;*** TRAZA LA CATENARIA HORIZONTAL ***
(setq in 5) ; ** intervalo 5 mts.
(setq x 0.0)
(command "_pline" p1)
(while (< x a)
(setq x(+ x in))
(setq xp(abs (- a2 x)))
(setq y(- (/ (* xp xp pe) (* 2 te)) ym)) ; *** FLECHA ***
(setq y(* y escy)) ; *** por factor
(setq y(+ y (* x (/ (sin v) (cos v))))) ; *** mas inclinacin
(setq p(list (+ x1 x) (+ y1 y)))
(command p)
)
(command "")
)

También podría gustarte