测试过程中发现被广泛引用的zInsert函数有个bug,就是当三角形有一边在竖直方向上的时候,会出现除数为0的错误。需要先判断除数为0的时候 直接给ZL赋值
或者用下面这个deep seek代码代替这个功能,我简单测试这个函数是没有问题的,不知道到底对不对。
 - ;重心坐标插值法 代替双线性内插 避免垂足三角网发生除数为0的错误
- (defun 重心坐标插值法求点在面的投影高程 (lst / p a b c denom lambda1 lambda2 lambda3 h)
- (setq p(car lst)
- a(car(cadr lst))
- b(cadr(cadr lst))
- c(caddr(cadr lst)))
- (setq denom (+ (* (- (cadr B) (cadr C)) (- (car A) (car C)))
- (* (- (car C) (car B)) (- (cadr A) (cadr C)))))
-
- (setq lambda1 (/ (+ (* (- (cadr B) (cadr C)) (- (car P) (car C)))
- (* (- (car C) (car B)) (- (cadr P) (cadr C))))
- denom))
-
- (setq lambda2 (/ (+ (* (- (cadr C) (cadr A)) (- (car P) (car C)))
- (* (- (car A) (car C)) (- (cadr P) (cadr C))))
- denom))
-
- (setq lambda3 (- 1 lambda1 lambda2))
-
- ; 计算点P的高程
- (setq h(+ (* lambda1 (caddr A))
- (* lambda2 (caddr B))
- (* lambda3 (caddr C))))
- (list(car(car lst))(cadr(car lst))h)
- )
|