一些向量运算的子程序
本帖最后由 陨落 于 2015-12-9 09:57 编辑话不多说,直接上源码(defun num*vec(num vec);;;;;向量数乘
(mapcar '(lambda(x) (* x num)) vec))
(defun vec+vec(vec1 vec2);;;;;向量相加
(if (= (length vec1) (length vec2))
(mapcar '(lambda (x y)(+ x y))vec1 vec2)
(princ "\n出错:向量长度不一致")))
(defun vec-vec(vec1 vec2);;;;;向量相减
(if (= (length vec1) (length vec2))
(mapcar '(lambda (x y)(- x y))vec1 vec2)
(princ "\n出错:向量长度不一致")))
(defun vec*vec(vec1 vec2);;;;;向量数量积
(if (= (length vec1) (length vec2))
(apply '+(mapcar '(lambda (x y)(* x y))vec1 vec2))
(princ "\n出错:向量长度不一致")))
(defun vecmod(vec);;;;;;向量的模
(sqrt(apply '+(mapcar '(lambda(x)(* x x)) vec))))
(defun pervec(pt1 pt2);;;;两点之间的单位向量
(setq vecs(vec-vec pt2 pt1))
(num*vec(/ 1(vecmod vecs))vecs)
) (defun vec+vec(vec1 vec2);;;;;向量相加
(if (= (length vec1) (length vec2))
(mapcar '+ vec1 vec2)
(princ "\n出错:向量长度不一致")))
(defun vec-vec(vec1 vec2);;;;;向量相减
(if (= (length vec1) (length vec2))
(mapcar '- vec1 vec2)
(princ "\n出错:向量长度不一致")))
(defun vec*vec(vec1 vec2);;;;;向量数量积
(if (= (length vec1) (length vec2))
(apply '+(mapcar '* vec1 vec2))
(princ "\n出错:向量长度不一致")))
(defun vecmod(vec);;;;;;向量的模
(sqrt(apply '+(mapcar '* vec vec))))可以这样写 不用lambda建立临时函数 学习一下,谢谢 感谢大师的分享
不是这些用在什么地方啊
请指点 ynhh 发表于 2015-12-9 15:32 static/image/common/back.gif
感谢大师的分享
不是这些用在什么地方啊
请指点
我也不是大师
在运算一些比较复杂的位置的时候,我感觉还是向量用得比较顺手 学习一下,谢谢楼主的源码 请问如何实现向量旋转90度呢 学习学习,谢谢分享
页:
[1]