陨落 发表于 2015-12-8 19:44:22

一些向量运算的子程序

本帖最后由 陨落 于 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)
)

kkq0305 发表于 2021-12-10 18:48:57

(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建立临时函数

ymcui 发表于 2015-12-9 08:15:56

学习一下,谢谢   

ynhh 发表于 2015-12-9 15:32:57

感谢大师的分享
不是这些用在什么地方啊
请指点

陨落 发表于 2015-12-9 17:31:01

ynhh 发表于 2015-12-9 15:32 static/image/common/back.gif
感谢大师的分享
不是这些用在什么地方啊
请指点

我也不是大师
在运算一些比较复杂的位置的时候,我感觉还是向量用得比较顺手

feng83 发表于 2015-12-19 06:17:46

学习一下,谢谢楼主的源码

20060510412 发表于 2021-12-7 20:12:38

请问如何实现向量旋转90度呢

lijunfa12345 发表于 2024-10-1 14:15:38

学习学习,谢谢分享
页: [1]
查看完整版本: 一些向量运算的子程序