chamous 发表于 2005-12-31 15:56:00

如何定义反余弦函数

<P>LISP中没有反余弦函数,但计算中常知道三角形的三个边,这时需要求出该三角形的一个角则没有相应的反余弦函数拿来用.相关计算公式:arccos(A)=arccos[(b*b+c*c -a*a)/2*b*c].如何定义这样一个函数呢?</P>
<P>恳请哪位大侠指教!</P>
<P>谢谢!</P>

hxh2901 发表于 2006-1-5 08:18:00

用这个子程序可以解决问题吗?

<P>(defun acos(val)</P>
<P>(atan (/ (sqrt (- 1.0 (* val val))) val))</P>
<P>)</P>

niuer 发表于 2006-4-3 09:57:00

<P>这样可以避免出现差错,也可加快运行 !</P>
<P>(defun acos (x / ls ) <BR>&nbsp;(cond <BR>&nbsp;&nbsp;&nbsp; ((= x 0)&nbsp; (setq ls (* 0.5 pi)))<BR>&nbsp;&nbsp;&nbsp; ((= x 1)&nbsp; (setq ls 0))<BR>&nbsp;&nbsp;&nbsp; ((= x -1) (setq ls pi))<BR>&nbsp;&nbsp;&nbsp; ((&gt; (abs x) 1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (alert "&nbsp;&nbsp;&nbsp;&nbsp; ** ERROR **&nbsp; \n arccos(x)的最大值是 1")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq pbcos "ERROR" ls 0)<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; ((&lt; (abs x) 1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ls (atan (/ (sqrt (- 1 (* x x))) x)) )<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;);cond <BR>);defun acos</P>
页: [1]
查看完整版本: 如何定义反余弦函数