社区
图形处理/算法
帖子详情
求多边形形心坐标算法
xb4270293
2003-05-22 10:10:42
已知多边形的各顶点坐标(X,Y),如何计算形心坐标?
...全文
894
4
打赏
收藏
求多边形形心坐标算法
已知多边形的各顶点坐标(X,Y),如何计算形心坐标?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shaolunyuan
2003-05-23
打赏
举报
回复
// 求凸多边形的重心,要求输入多边形按逆时针排序
POINT gravitycenter(int vcount,POINT polygon[])
{
POINT tp;
double x,y,s,x0,y0,cs,k;
x=0;y=0;s=0;
for(int i=1;i<vcount-1;i++)
{
x0=(polygon[0].x+polygon[i].x+polygon[i+1].x)/3;
y0=(polygon[0].y+polygon[i].y+polygon[i+1].y)/3; //求当前三角形的重心
cs=multiply(polygon[i],polygon[i+1],polygon[0])/2;
//三角形面积可以直接利用该公式求解
if(abs(s)<1e-20)
{
x=x0;y=y0;s+=cs;continue;
}
k=cs/s; //求面积比例
x=(x+k*x0)/(1+k);
y=(y+k*y0)/(1+k);
s += cs;
}
tp.x=x;
tp.y=y;
return tp;
}
shaolunyuan
2003-05-23
打赏
举报
回复
/* 求任意简单多边形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[i];
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;
}
wqs6
2003-05-22
打赏
举报
回复
http://course.bitsde.com/tt/normal/cllx/kjzt/clkc/fulu/tm02/tm02.htm
opentuxedo
2003-05-22
打赏
举报
回复
Sigma(X)/n,Sigma(Y)/n
C#计算
多边
形
的重心方法
地图开发经常需要画面,然后在面的中心标文字,有些面计算出来中心点不在面内;如果换成计算重心的
算法
就不会出现这种情况。代码测试可用,希望对你有帮助。
LISP
多边
形
形
心计算公式_计算几何-
多边
形
重心公式
这是
求
多边
形
最简单直观的方法。可以直接利用离散数据点的x,y坐标就能
求
图
形
重心。但是缺陷在于没有对离散数据点所围图
形
做任何处理和分析,精度不够。1.2
算法
一:在讲该
算法
时,先要明白下面几个定理。定理1已知三角
形
△A1A2A3的顶点坐标Ai(xi,yi)(i=1,2,3)。它的重
心坐标
为:xg=(x1+x2+x3)/3;yg=(y1+y2+y3)/3;定理...
【
形
心】不规则
多边
形
形
心计算方法(含面积计算)
不规则
多边
形
形
心计算若干方法小结这里以凹
多边
形
为例,方便排查所计算坐标不在
多边
形
之外。
多边
形
重心公式
算法
多边
形
重心公式
算法
,有需要的朋友可以参考下。 网上看了很多,但是有的需要序列逆序,但是,对顶点序列转置后计算的重
心坐标
还是不正确,话费好长时间找到这个,测试一些可以使用,如果有什么不正确的,希望可以指出来,我也好及时的更正。
多边
形
的重心公式: 1、
多边
形
重心公式,需要知道每个顶点坐标,令面积为area,则 | Xi X(i+1)| area = s
多边
形
重心的计算
例题: 传送门:HDU 1115 方法一: 累加
求
和重心。 设平面上有n个点(xi,yi)(i=1、2、3……n),其
多边
形
重心G(x,y)为: 这是
求
多边
形
最简单直观的方法。可以直接利用数据点的x, y坐标就能
求
图
形
重心。但是缺陷在于没有对离散数据点所围图
形
做任何处理和分析,精度不够。 方法二: 这里有几个定理需要用到: 定理一:已知三角
形
△A1A2A3的顶点坐标Ai ( xi, yi ...
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章