社区
C++ 语言
帖子详情
跪求:凹多边形形心算法(重心)
weir75034
2009-01-08 10:39:00
如题:小弟跪求凹多边形形心算法
形心:因为小弟所用多边形均为匀质多边形,所以形心即重心。
小弟晓得可以用微积分做,可是我想知道如何通过各顶点坐标去求形心。
望高手指点。。最好能贴出代码。。主要包括 槽型、I型、T型、双槽型。。
...全文
3008
13
打赏
收藏
跪求:凹多边形形心算法(重心)
如题:小弟跪求凹多边形形心算法 形心:因为小弟所用多边形均为匀质多边形,所以形心即重心。 小弟晓得可以用微积分做,可是我想知道如何通过各顶点坐标去求形心。 望高手指点。。最好能贴出代码。。主要包括 槽型、I型、T型、双槽型。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bitterapricot
2011-09-11
打赏
举报
回复
可以拆分为三角形,按三角形公式计算各三角形的形心及惯性矩,再移轴.
neeestth
2009-01-09
打赏
举报
回复
怎么确定一个多边形是凸多边形?
星羽
2009-01-09
打赏
举报
回复
积分啊。。。。
up
joly_zl
2009-01-09
打赏
举报
回复
其实就是找重心的的问题。
1 如果这个多边形是关于x(或者y)对称得,那么可以找到重心的y(x坐标),y=(yLeft+yRight)/2
2 如果不是对称的,需要计算重心的x和y坐标
(1)计算x坐标,x坐标切割多边形的左右面积相等,找到x, 面积用积分公式
(2)计算x坐标,y坐标切割多边形的上下面积相等,找到y, 面积用积分公式
weir75034
2009-01-09
打赏
举报
回复
我上面贴出的算法是正确的,大家可以用,刚才程序其他地方有点问题。。嘻嘻。。不好意思。。
谢谢大家了。。
yaoyansi
2009-01-09
打赏
举报
回复
这种属于计算几何的问题,应该在一些开源的(计算几何)工具库里有吧.
http://www.cgal.org/
这里有更多的资料,http://www.realtimerendering.com/index.html#polytech
你可能只需要其中计算几何和算法相关的部分.
找到之后,请来这里汇报一下.
nullah
2009-01-09
打赏
举报
回复
up~~
weir75034
2009-01-09
打赏
举报
回复
没有人知道么?
我在网上找到如下代码,可是在计算槽形的形心时算出来的结果是错误的。。。
希望有高手可以解释一下这是什么原因,小弟感激不尽。。。
/* 求任意简单多边形polygon的重心
需要调用下面几个函数:
void AddPosPart(); 增加右边区域的面积
void AddNegPart(); 增加左边区域的面积
void AddRegion(); 增加区域面积
在使用该程序时,如果把xtr,ytr,wtr,xtl,ytl,wtl设成全局变量就可以使这些函数的形式得到化简,但要注意函数的声明和调用要做相应变化
*/
void AddPosPart(double x, double y, double w, double &xtr, double &ytr, double &wtr)
{
if (abs(wtr + w)<1e-10 ) return; // detect zero regions
xtr = ( wtr*xtr + w*x ) / ( wtr + w );
ytr = ( wtr*ytr + w*y ) / ( wtr + w );
wtr = w + wtr;
return;
}
void AddNegPart(double x, ouble y, double w, double &xtl, double &ytl, double &wtl)
{
if ( abs(wtl + w)<1e-10 )
return; // detect zero regions
xtl = ( wtl*xtl + w*x ) / ( wtl + w );
ytl = ( wtl*ytl + w*y ) / ( wtl + w );
wtl = w + wtl;
return;
}
void AddRegion ( double x1, double y1, double x2, double y2, double &xtr, double &ytr,
double &wtr, double &xtl, double &ytl, double &wtl )
{
if ( abs (x1 - x2)< 1e-10 )
return;
if ( x2 > x1 )
{
AddPosPart ((x2+x1)/2, y1/2, (x2-x1) * y1,xtr,ytr,wtr); /* rectangle 全局
变量变化处 */
AddPosPart ((x1+x2+x2)/3, (y1+y1+y2)/3, (x2-x1)*(y2-y1)/2,xtr,ytr,wtr);
// triangle 全局变量变化处
}
else
{
AddNegPart ((x2+x1)/2, y1/2, (x2-x1) * y1,xtl,ytl,wtl);
// rectangle 全局变量变化处
AddNegPart ((x1+x2+x2)/3, (y1+y1+y2)/3, (x2-x1)*(y2-y1)/2,xtl,ytl,wtl);
// triangle 全局变量变化处
}
}
POINT cg_simple(int vcount,POINT polygon[])
{
double xtr,ytr,wtr,xtl,ytl,wtl;
//注意: 如果把xtr,ytr,wtr,xtl,ytl,wtl改成全局变量后这里要删去
POINT p1,p2,tp;
xtr = ytr = wtr = 0.0;
xtl = ytl = wtl = 0.0;
for(int i=0;i<vcount;i++)
{
p1=polygon;
p2=polygon[(i+1)%vcount];
AddRegion(p1.x,p1.y,p2.x,p2.y,xtr,ytr,wtr,xtl,ytl,wtl); //全局变量变化处
}
tp.x = (wtr*xtr + wtl*xtl) / (wtr + wtl);
tp.y = (wtr*ytr + wtl*ytl) / (wtr + wtl);
return tp;
}
chenchangxiong
2009-01-09
打赏
举报
回复
首先你得知道一个多边形求面积的简单方法:
比如
a1,a2,...an
则定点a1, a2, a3组成一三角形
顺时针面积为正,逆时针为副
则S=|s123+s134+s145+.......+s1n-1n|
再则有两个已知中心的区域a,b
求两个区域合起来的方法
x=(Sa*Xa+Sb*Xb)/(Sa+Sb)
y类似
面积变为Sa+Sb
三角形重心及其面积应当很好解
不过对于楼主给的例子程序的做法看不太明白,变量真多
猫已经找不回了
2009-01-09
打赏
举报
回复
mark
weir75034
2009-01-09
打赏
举报
回复
最终还是不能理解自己找到的那几个函数的意思。。
有没有高人可以解释一下那几个函数呢?
neeestth
2009-01-09
打赏
举报
回复
多边形的中心
一个由 N 个顶点( xi , yi ) 确定的不自交闭多边形的中心能如下计算: [1]
记号 ( xN , yN )与顶点 ( x0 , y0 )相同。多边形的面积为:
A = \frac{1}{2}\sum_{i=0}^{N-1} (x_i\ y_{i+1} - x_{i+1}\ y_i)
多边形的中心由下式给出:
C_x = \frac{1}{6A}\sum_{i=0}^{N-1}(x_i+x_{i+1})(x_i\ y_{i+1} - x_{i+1}\ y_i)
C_y = \frac{1}{6A}\sum_{i=0}^{N-1}(y_i+y_{i+1})(x_i\ y_{i+1} - x_{i+1}\ y_i)
维基百科有个这样的公式,可以直接用不?
aaajj
2009-01-08
打赏
举报
回复
还是要微分啊
2018-伪
形心
多边形
形心
距离计算方法1
摘要:针对
多边形
形心
距离计算过程中存在的
形心
位于
多边形
外的问题,该文提出伪
形心
的概念,通过三角剖分的方式,计算
多边形
边界到
多边形
形心
距离最小的点,将
形心
合理地平
C#计算
多边形
的
重心
方法
地图开发经常需要画面,然后在面的中心标文字,有些面计算出来中心点不在面内;如果换成计算
重心
的
算法
就不会出现这种情况。代码测试可用,希望对你有帮助。
matlab计算面积和
形心
源码.zip_MATLAB求
形心
_sentence9yg_
形心
_计算面积_面积计算
计算非连通
多边形
的面积和面积,输出其面积和
形心
坐标
论文研究-一种扰动泰森
多边形
形心
的WSNs部署策略 .pdf
一种扰动泰森
多边形
形心
的WSNs部署策略,宋鑫宏,方伟,针对无线传感器网络的覆盖问题,利用泰森
多边形
顶点有效探测盲区的特性,提出了一种扰动泰森
多边形
形心
的部署策略(DCBS)。DCBS以�
任意
多边形
的 面积 、
形心
、惯性距
上面的程序有点问题,但不知如何替换成现在的程序,故在上传一个新的. 本程序可以计算任意
多边形
的 面积 、
形心
、惯性距、和柱体体积这在房地产、工程计算、测量中十分有用。可以计算由经纬度数据或坐标提供的数据,也可以在图片文件上直接定义
多边形
.
C++ 语言
64,692
社区成员
250,504
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章