明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: yanshengjiang

[源码] 根据南方cass高程点 内插高程点

  [复制链接]
 楼主| 发表于 4 天前 | 显示全部楼层
luzhmu 发表于 2025-9-29 08:29
三角网内插么?

根据greed鼠标位置创建矩形高程点选择集、得到三角网点表、判断在哪个三角形内、重心坐标插值法求点在面的投影高程
大概这几个步骤
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 4 天前 | 显示全部楼层
测试过程中发现被广泛引用的zInsert函数有个bug,就是当三角形有一边在竖直方向上的时候,会出现除数为0的错误。需要先判断除数为0的时候 直接给ZL赋值

或者用下面这个deep seek代码代替这个功能,我简单测试这个函数是没有问题的,不知道到底对不对。
  1. ;重心坐标插值法   代替双线性内插  避免垂足三角网发生除数为0的错误
  2. (defun 重心坐标插值法求点在面的投影高程 (lst / p a b c denom lambda1 lambda2 lambda3 h)
  3.   (setq p(car lst)
  4.         a(car(cadr lst))
  5.         b(cadr(cadr lst))
  6.         c(caddr(cadr lst)))
  7.   (setq denom (+ (* (- (cadr B) (cadr C)) (- (car A) (car C)))
  8.                  (* (- (car C) (car B)) (- (cadr A) (cadr C)))))
  9.   
  10.   (setq lambda1 (/ (+ (* (- (cadr B) (cadr C)) (- (car P) (car C)))
  11.                       (* (- (car C) (car B)) (- (cadr P) (cadr C))))
  12.                  denom))
  13.   
  14.   (setq lambda2 (/ (+ (* (- (cadr C) (cadr A)) (- (car P) (car C)))
  15.                       (* (- (car A) (car C)) (- (cadr P) (cadr C))))
  16.                  denom))
  17.   
  18.   (setq lambda3 (- 1 lambda1 lambda2))
  19.   
  20.   ; 计算点P的高程
  21.   (setq h(+ (* lambda1 (caddr A))
  22.      (* lambda2 (caddr B))
  23.      (* lambda3 (caddr C))))
  24.   (list(car(car lst))(cadr(car lst))h)
  25. )
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-10-3 04:41 , Processed in 0.137380 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表