(defun ufb00019 ( u_pc1 ;円弧1の中心座標 u_r1 ;円弧1の半径 u_as1 ;円弧1の始点角度(度) 0.0 <= u_as1 < 360.0 u_ae1 ;円弧1の終点角度(度) 0.0 <= u_ae1 < 360.0 u_pc2 ;円弧2の中心座標 u_r2 ;円弧2の半径 u_as2 ;円弧2の始点角度(度) 0.0 <= u_as2 < 360.0 u_ae2 ;円弧2の終点角度(度) 0.0 <= u_ae2 < 360.0 u_eps ;許容誤差 u_epa ;許容誤差(度) / pntot ;交点座標値 ; nil:交点がないまたは求めることができない ; ((x y) nil) 1つの交点がある ; ((x y) (x y)) 2つの交点がある nfpt pi2 epa as ae p1 p2 nf1 nf2 a1 fg ww a2 ) ;円弧と円弧の交点を求める (setq pntot nil) (if (and (> u_r1 u_eps) (> u_r2 u_eps)) (progn (setq nfpt (ufb00018 u_pc1 u_r1 u_pc2 u_r2 u_as2 u_ae2 u_eps u_epa)) (if (/= nfpt nil) (progn (setq pi2 (* 2.0 PI)) (setq epa (/ (* u_epa PI) 180.0)) (setq as (/ (* u_as1 PI) 180.0)) (setq ae (/ (* u_ae1 PI) 180.0)) (if (> as (+ ae epa)) (setq ae (+ ae pi2)) ) (setq p1 (car nfpt)) (setq p2 (cadr nfpt)) (setq nf1 0) (setq nf2 0) (if (/= p1 nil) (progn (setq a1 (angle u_pc1 p1)) (if (> as (+ a1 epa)) (setq a1 (+ a1 pi2)) ) (setq fg 0) (if (and (>= a1 as) (<= a1 ae)) (setq fg 1) ) (setq ww (abs (- a1 as))) (if (<= ww epa) (setq fg 2) ) (setq ww (abs (- a1 ae))) (if (<= ww epa) (setq fg 2) ) (if (or (= fg 1) (= fg 2)) (setq nf1 1) ) ) ) (if (/= p2 nil) (progn (setq a2 (angle u_pc1 p2)) (if (> as (+ a2 epa)) (setq a2 (+ a2 pi2)) ) (setq fg 0) (if (and (>= a2 as) (<= a2 ae)) (setq fg 1) ) (setq ww (abs (- a2 as))) (if (<= ww epa) (setq fg 2) ) (setq ww (abs (- a2 ae))) (if (<= ww epa) (setq fg 2) ) (if (or (= fg 1) (= fg 2)) (setq nf2 1) ) ) ) (if (and (= nf1 1) (= nf2 0)) (setq pntot (list p1 nil)) ) (if (and (= nf1 0) (= nf2 1)) (setq pntot (list p2 nil)) ) (if (and (= nf1 1) (= nf2 1)) (setq pntot (list p1 p2)) ) ) ) ) ) pntot )