怎样求解任意个点依次连成直线段所构成的封闭曲面的面积

Zhouxw 2000-08-29 09:57:00
在CAD中,有一个命令叫"AREA",可以查询其封闭曲线的面积,如何在程序中实现,求教其算法。
...全文
207 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zhouxw 2000-09-02
  • 打赏
  • 举报
回复
谢谢各位。
ahchry 2000-09-01
  • 打赏
  • 举报
回复
LISP语言有个错误,更正一下:
有两种方法:
1、S=∑0.5*(Xi*Y(i+1)-Y(i+1)*Xi)
(setq darea (+ darea (* 0.5 (- (* (car pthis) (cadr pnext)) (* (car pnext) (cadr pthis))))))
(注意:当i为最后一点时,i+1点等于第一点)
2、S=∑0.5*Xi*(Y(i+1)-Y(i-1))
(setq darea (+ darea (* 0.5 (car pthis) (- (cadr pnext) (cadr plast)))))
(注意:当i为第一点时,i-1点等于最后一点
当i为最后一点时,i+1点等于第一点
)
结果有正有负,取绝对值就行了!

ahchry 2000-09-01
  • 打赏
  • 举报
回复
有两种方法:
1、S=∑0.5*(Xi*Y(i+1)-Y(i+1)*Xi)
(setq darea (+ darea (* 0.5 (- (* (car pthis) (cadr pnext)) (* (car pnext) (cadr pthis))))))
(注意:当i为最后一点时,i+1点等于第一点)
2、S=∑0.5*Xi*(Y(i+1)-Y(i-1))
(setq darea (+ darea (* 0.5 (car pthis) (- (cadr pnext) (cadr pnext)))))
(注意:当i为第一点时,i-1点等于最后一点
当i为最后一点时,i+1点等于第一点
)
结果有正有负,取绝对值就行了!

ahchry 2000-09-01
  • 打赏
  • 举报
回复
有两种方法:
1、S=∑0.5*(Xi*Y(i+1)-Y(i+1)*X(i))
(setq darea (+ darea (* 0.5 (- (* (car pthis) (cadr pnext)) (* (car pnext) (cadr pthis))))))
(注意:当i为最后一点时,i+1点等于第一点)
2、S=∑0.5*Xi*(Y(i+1)-Y(i-1))
(setq darea (+ darea (* 0.5 (car pthis) (- (cadr pnext) (cadr pnext)))))
(注意:当i为第一点时,i-1点等于最后一点
当i为最后一点时,i+1点等于第一点
)

Zhouxw 2000-08-31
  • 打赏
  • 举报
回复
不过,对于坐标点有负值时,例如,仅有一点的X或Y值为负,结果不对;
当线段有交叉时,结果不对。
Zhouxw 2000-08-30
  • 打赏
  • 举报
回复
谢谢tchaikov,此算法可行。
tchaikov 2000-08-30
  • 打赏
  • 举报
回复
好象是这样的:
设有 1-n个点连成二维曲面,其坐标分别是 (X1,Y1)到(Xn,Yn)则
面积S=S1/2
其中 S1 = X1*(Y2-Yn)
+ X2*(Y3-Y1)
+ X3*(Y4-Y2)
+ X4*(Y5-Y3)
+ ...
+ Xn-1*(Yn-Yn-2) //注意这里 Xn-1,Yn-2中,n-1,n-2是下标
+ Xn*(Y1-Yn-1) //同上

我印象不深了,你用 AREA 命令核实一下,是对是错,请回个信息,不存在精度的问题的,我以前写过的。
Kevin_qing 2000-08-29
  • 打赏
  • 举报
回复
精确度要求高吗?

33,006

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧