(defun ufb00015 ( u_p1 ;線分の始点 u_p2 ;線分の終点 u_pc ;円弧の中心 u_rr ;円弧の半径 u_as ;円弧の始角(度) 0.0 <= u_as < 360.0 u_ae ;円弧の終角(度) 0.0 <= u_ae < 360.0 u_eps ;許容誤差 u_epa ;許容誤差(度) / pout ;交点座標 ; nil:交点がないまたは求めることができない ; ((x y) nil) 1つの交点がある ; ((x y) (x y)) 2つの交点がある pcrs pc3 pc4 epa as ae pi2 p3 p4 a3 fg ww a4 ) ;無限線分と円弧の交点を求める (setq pout nil) (setq pcrs (ufb00012 u_p1 u_p2 u_pc u_rr u_eps)) (if (/= pcrs nil) (progn (setq pc3 nil) (setq pc4 nil) (setq epa (/ (* u_epa PI) 180.0)) (setq as (/ (* u_as PI) 180.0)) (setq ae (/ (* u_ae PI) 180.0)) (setq pi2 (* 2.0 PI)) (setq p3 (car pcrs)) (if (= (cadr pcrs) nil) (setq p4 nil) (setq p4 (cadr pcrs)) ) (setq a3 (angle u_pc p3)) (if (> as (+ ae epa)) (setq ae (+ ae pi2)) ) (if (> as (+ a3 epa)) (setq a3 (+ a3 pi2)) ) (setq fg 0) (if (and (>= a3 as) (<= a3 ae)) (setq fg 1) ) (setq ww (abs (- a3 as))) (if (<= ww epa) (setq fg 2) ) (setq ww (abs (- a3 ae))) (if (<= ww epa) (setq fg 2) ) (if (or (= fg 1) (= fg 2)) (setq pc3 p3) ) (if (/= p4 nil) (progn (setq a4 (angle u_pc p4)) (if (> as (+ a4 epa)) (setq a4 (+ a4 pi2)) ) (setq fg 0) (if (and (>= a4 as) (<= a4 ae)) (setq fg 1) ) (setq ww (abs (- a4 as))) (if (<= ww epa) (setq fg 2) ) (setq ww (abs (- a4 ae))) (if (<= ww epa) (setq fg 2) ) (if (or (= fg 1) (= fg 2)) (setq pc4 p4) ) ) ) (if (and (/= pc3 nil) (/= pc4 nil)) (setq pout (list pc3 pc4)) ) (if (and (/= pc3 nil) (= pc4 nil)) (setq pout (list pc3 nil)) ) (if (and (= pc3 nil) (/= pc4 nil)) (setq pout (list pc4 nil)) ) ) ) pout )