社区
图形处理/算法
帖子详情
求多边形形心坐标算法
xb4270293
2003-05-22 10:10:42
已知多边形的各顶点坐标(X,Y),如何计算形心坐标?
...全文
956
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
LISP
多边
形
形
心计算公式_计算几何-
多边
形
重心公式
博客介绍了利用离散数据点的x、y坐标
求
多边
形
形
心的方法,此方法简单直观但精度不够。还阐述了
算法
一,包括三角
形
重
心坐标
和面积的计算公式,以及将
多边
形
划分成小区域,利用平面薄板重心公式把积分变为累加和来
求
解
形
心的原理。
求
任意
多边
形
面积与重心的
算法
本文介绍了一种计算不规则
多边
形
面积及其重心的方法,包括三角
形
面积的向量叉乘运算、三角
形
重
心坐标
公式,并通过将
多边
形
拆分为多个三角
形
来
求
解整体的面积和重心。
如何判断一个点在
多边
形
内
本文详细介绍了如何利用面积法、叉积法、重
心坐标
法等经典方法判断点在平面三角
形
和
多边
形
内的位置,包括
多边
形
的面积和、逆时针向量判断、重
心坐标
系统应用,以及光线投射
算法
、二分法等高级技巧。
求
凸
多边
形
的重心 例:hdu 1115 Lifting the Stone
本文介绍了如何使用累加和方法
求
解凸
多边
形
的重心,通过将
多边
形
划分为多个三角
形
,利用三角
形
重
心坐标
公式进行计算。这种方法简单直观,但精度有限。文章还提供了相关数学定理和HDU 1115题目的实例代码。
【
形
心实战】从公式推导到代码实现:不规则
多边
形
形
心计算的三种核心
算法
对比
本文深入解析不规则
多边
形
形
心计算的三种核心技术:基于Shapely库的封装调用法、三角
形
剖分加权法及鞋带公式直接计
算法
。重点阐述各
算法
的数学原理、实现逻辑与适用约束;通过精度测试(标准
多边
形
验证)、效率 benchmark(万级顶点)和边界处理能力对比,明确其在GIS、游戏物理、工业设计等场景下的选型依据,并给出NumPy向量化、Cython加速等工程优化实践。
图形处理/算法
19,466
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章