0
点赞
收藏
分享

微信扫一扫

js 计算任意多边形质心点计算 根据一组地图坐标计算中心点

yeamy 2023-03-03 阅读 59


多边形质心点计算

根据地图坐标数组得出中心位置

俗称 质点

function tqe_perc()
{
var v=[],id="",p=0,area=0,cx=0,cy=0;

var count=$("#count").val();
if(count=="")
{
alert("Enter no of sides of polygon");
$("#count").focus();
return false;
}
else if(parseFloat(count)<3)
{
alert("Enter no of sides of polygon minimum 3 sides");
$("#count").focus();
return false;
}
else
{
count=parseFloat(count);
for(i=1;i<=count;i++)
{
v[i]=[];
for(j=1;j<=2;j++)
{
id="#i"+i+j;
p=$(id).val();//alert(i+"+"+j);
v[i][j]=parseFloat(p);//alert(v[i][j]);

}
}
}

for(i=1;i<=count;i++)
{
if(i==count)
{
area+=v[i][1]*v[1][2]-v[1][1]*v[i][2];
}
else
{
area+=v[i][1]*v[i+1][2]-v[i+1][1]*v[i][2];
}
}
area=area/2;
if(area!=0)
{
for(i=1;i<=count;i++)
{
if(i==count)
{
cx+=(v[i][1]+v[1][1])*((v[i][1]*v[1][2])-(v[1][1]*v[i][2]));
cy+=(v[i][2]+v[1][2])*((v[i][1]*v[1][2])-(v[1][1]*v[i][2]));
}
else
{
cx+=(v[i][1]+v[i+1][1])*((v[i][1]*v[i+1][2])-(v[i+1][1]*v[i][2]));
cy+=(v[i][2]+v[i+1][2])*((v[i][1]*v[i+1][2])-(v[i+1][1]*v[i][2]));
}
}

cx=(1/(6*area))*cx;
cy=(1/(6*area))*cy;
}
else
{
cx=0;
cy=0
}
//alert(cx);//alert(cy);
cx=Math.round(cx*1000)/1000;
cy=Math.round(cy*1000)/1000;
$("#x").val(cx);
$("#y").val(cy);
}

//================================

 

举报

相关推荐

0 条评论