找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 587|回复: 4

[讨论]:计算多边形的形心时, 到底有几种计算方法.

[复制链接]
发表于 2002-5-23 05:39:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我只知道面积矩的方法, 但在计算机上不好自动实现.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-5-23 21:17:46 | 显示全部楼层
cad可以计算,命令massprop
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-5-23 21:52:55 | 显示全部楼层
我是想找数学计算方法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-8 17:37:10 | 显示全部楼层
我也在找,鱼,找到后麻烦招呼下:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-8 21:06:27 | 显示全部楼层

鱼,我找到啦,呵呵~~~~可惜不会C++,只能慢慢猜算法再改VBA啦

//截面几何特性计算类

#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <math.h>

class cross           //截面类
{
class nodexy          //边界点
{
public:
int i;
float x,y;         //点坐标
nodexy *next;
nodexy(int m)
{
i=m;
x=0.0;
y=0.0;
next=NULL;
}
};

int n;          //边界点总数
nodexy *head;   //边界点链

float Xmin;int ixi;
float Xmax;int ixa;
float Ymin;int iyi;
float Ymax;int iya;
float A;        //横截面面积
float X0;       //形心坐标X
float Y0;       //形心坐标Y
float Sx;       //静矩
float Sy;       //静矩
float Ix;       //惯性矩
float Iy;       //惯性矩
float Ko;       //上核心距
float Ku;       //下核心距

public:
void createnodexy(int);
void nodevaluein(char *);
nodexy *nodevalue(int);
void getproperty();
void show();
void getboundarynode();

cross(int i,char *data)
{
n=i;
createnodexy(i);
nodevaluein(data);
getboundarynode();
getproperty();
}
};

void cross::createnodexy(int m)
{
int i;
nodexy *p;
p=head=new nodexy(1);
for(i=2;i<=m;i++)
{
p->next=new nodexy(i);
p=p->next;
}
}

void cross::nodevaluein(char *data)
{
int i,j;
FILE *file=fopen(data,"rb");
if(file==NULL) cout<<"fail\n";
float x,y;
char num[10],tmp;
for(i=1;i<=n;i++)
{
//READ data
for(j=0;;j++)
  {
  if((tmp=fgetc(file))==',') {num[j]=0;break;}
  num[j]=tmp;
  }
x=(float)atof(num);
for(j=0;;j++)
{
if((tmp=fgetc(file))==0x0d) {num[j]=0;fgetc(file);break;}
num[j]=tmp;
}
y=(float)atof(num);
nodevalue(i)->x=x;
nodevalue(i)->y=y;
}
fclose(file);
}

cross::nodexy *cross::nodevalue(int m)
{
int i;
nodexy *p=head;
if(m>n) return NULL;
for(i=1;i<m;i++)
p=p->next;
return p;
}

void cross::getboundarynode()
{
float xin,yin;
int i;
Xmax=Xmin=nodevalue(1)->x;
Ymax=Ymin=nodevalue(1)->y;
ixa=ixi=iya=iyi=1;
for(i=1;i<n;i++)
{
xin=nodevalue(i)->x;
yin=nodevalue(i)->y;
if(xin>Xmax) {Xmax=xin;ixa=i;}
if(xin<Xmin) {Xmin=xin;ixi=i;}
if(yin>Ymax) {Ymax=yin;iya=i;}
if(yin<Ymin) {Ymin=yin;iyi=i;}
}
}

void cross::getproperty()
{
int i;
float tmp=0.0,A0=0.0,Sex=0.0,Sey=0.0,Iex=0.0,Iey=0.0;
float xi,yi,xj,yj;
for(i=1;i<=n-1;i++)
{
xi=nodevalue(i)->x;
yi=nodevalue(i)->y;
xj=nodevalue(i+1)->x;
yj=nodevalue(i+1)->y;
tmp=(xi*yj-xj*yi)/2;
A0+=tmp;
Sex+=tmp*(yi+yj)/3;
Sey+=tmp*(xi+xj)/3;
Iex+=tmp*(yi*yi+yi*yj+yj*yj)/6;
Iey+=tmp*(xi*xi+xi*xj+xj*xj)/6;
}
A=A0;
Sx=Sex;
Sy=Sey;
X0=Sy/A;
Y0=Sx/A;
Ix=Iex-A*Y0*Y0;
Iy=Iey-A*X0*X0;
Ko=Ix/(Y0-Ymin)/A;
Ku=Ix/(Ymax-Y0)/A;

}

void cross::show()
{
cout<<"A="<<A<<endl;
cout<<"X0="<<X0<<endl;
cout<<"Y0="<<Y0<<endl;
cout<<"Sx="<<Sx<<endl;
cout<<"Sy="<<Sy<<endl;
cout<<"Ix="<<Ix<<endl;
cout<<"Iy="<<Iy<<endl;
cout<<"Ko="<<Ko<<endl;
cout<<"Ku="<<Ku<<endl;
cout<<"Xmax="<<Xmax<<endl;
cout<<"Xmin="<<Xmin<<endl;
cout<<"Ymax="<<Ymax<<endl;
cout<<"Ymin="<<Ymin<<endl;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-11-11 01:21 , Processed in 0.186049 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表