;*********************************************** ; 三角形  ;*********************************************** (defun c:triangle() (prompt "\n3辺を入力(反時計廻り)") (setq gp1 (getpoint "\n三角形の底辺 1点目 :")) (if (/= gp1 nil) (progn (setq gp2 (getpoint "\n底辺の2点目(距離入力でも可) :" gp1)) (setq distA (distance gp1 gp2 ));a (if (/= gp2 nil);Dist1 Point2 (progn (setq gl3 (getdist "\n2辺目の長さを入力 :" gp2));b (if (/= gl3 nil);Dist2 (progn (setq gl4 (getdist "\n3辺目の長さを入力 :" gp1));c (if (/= gl4 nil);Dist3 (progn;p Set ;角度の計算 ;cosB=c2+a2-b2 / 2ca (setq cosangB (/ (- (+ (expt gl4 2.0) (expt distA 2.0)) (expt gl3 2.0)) (* 2.0 gl4 distA))) (if (< cosangB 1.0);check1 (progn (if (> cosangB -1.0);check2 (progn ;cosC=a2+b2-c2 / 2ab (setq cosangC (/ (- (+ (expt distA 2.0) (expt gl3 2.0)) (expt gl4 2.0) ) (* 2.0 distA gl3))) ;ARCCOS(X) = -ATN( X / SQRT( -1 * X2 + 1 ) ) + Pi /2=ATAN(1)*4 (setq angB (+ (* -1.0 (atan( / cosangB (sqrt (+ (* -1 (expt cosangB 2.0)) 1.0))))) (/ (* (atan 1.0) 4.0) 2.0))) (setq degB (Radian->Degrees angB)) (setq angC (+ (* -1.0 (atan( / cosangC (sqrt (+ (* -1 (expt cosangC 2.0)) 1.0))))) (/ (* (atan 1.0) 4.0) 2.0))) (setq degC (Radian->Degrees angC)) ;点の確認 (setq firstAng (angle gp1 gp2)) (setq pointC1 (polar gp1 (+ angB firstAng) gl4)) (setq pointC2 (polar gp2 (- (* (atan 1.0) 4.0) (+ angC firstAng)) gl3)) (command "_pline" gp1 gp2 pointC1 "_c" ) ) (progn (prompt "\n余弦定理が成立ちません") (princ) ) );progn check1 );progn check1 (progn (prompt "\n余弦定理が成立ちません") (princ) ) );end if check1 );p Set (progn (princ) ) );end if Dist2 ) (progn (princ) ) );end if Dist3 ) (progn (princ) ) );end if Dist1 Point2 ) (progn (princ) ) );end if Dist1 Point1 (princ) );end defun (defun Radian->Degrees (nbrOfRadians) (* 180.0 (/ nbrOfRadians (* (atan 1.0) 4.0))) ) (prompt "\ncommand:triangle") (princ)