我正在尝试创建一个球体顶点的 3d 坐标列表,从 ((0 0 1) ...) 开始,如下所示:
(defvar spherelatamount 7)
(defvar spherelonamount 8)
(defparameter sphereverticeslist (make-list (+ 2 (* (- spherelatamount 2) spherelonamount))))
(setf (elt sphereverticeslist 0) '(0 0 1))
尝试添加下一点
(setf (elt sphereverticeslist 1) '(0 (sin (/ pi 6)) (cos (/ pi 6))))
这给出了结果
((0 0 1) (sin (/ pi 6)) (cos (/ pi 6)) ...)
当我需要时:
((0 0 1) (0 0.5 0.866) ...)
即评估正弦和余弦。我该如何实现这一目标?谢谢。
写道:
(defvar spherelatamount 7)
(defvar spherelonamount 8)
(defparameter sphereverticeslist (make-list (+ 2 (* (- spherelatamount 2) spherelonamount))))
(setf (elt sphereverticeslist 0) '(0 0 1))
(setf (elt sphereverticeslist 1) '(0 (sin (/ pi 6)) (cos (/ pi 6))))
期待:
((0 0 1) (0 0.5 0.866) ...)
引用列表可以防止对列表中的所有内容进行求值,因此您只需插入文字值。
调用
list
创建包含评估值的列表。
(setf (elt sphereverticeslist 1) (list 0 (sin (/ pi 6)) (cos (/ pi 6))))
如果您混合使用文字值和计算值,则可以使用反引号/逗号。
(setf (elt sphereverticeslist 1) `(0 ,(sin (/ pi 6)) ,(cos (/ pi 6))))
您需要评估通话:
(defvar spherelonamount 8)
(defparameter sphereverticeslist (make-list (+ 2 (* (- spherelatamount 2) spherelonamount))))
(setf (elt sphereverticeslist 0) '(0 0 1))
(setf (elt sphereverticeslist 1) `(0 ,(sin (/ pi 6)) ,(cos (/ pi 6))))