乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 22|回复: 1

[ARX]随点画了N边形,请问怎么得到这个N边形的面积

[复制链接]

5

主题

16

帖子

1

银币

初来乍到

Rank: 1

铜币
36
发表于 2005-9-27 15:49:00 | 显示全部楼层 |阅读模式
随点画了个N边形,请问怎么得到这个N边形的面积,好象可以通过这种方法得到:
AcDbPolyline * pPline ;
double area=0;
pPline->getArea(area);
acutPrintf("\n面积为 %.3f\n",area);
可是我不知道如何添加?(加了几次了都取不到面积 很郁闷 )
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
ads_point pt1[512];
AcGePoint3d pt[512];
int NodeNumCount;
void area()
{
int i=0;
acedGetPoint(NULL,"\n请选择起始点:",asDblArray(pt[0]));
do {
acedGetPoint(asDblArray(pt[i]),"\n拾取下一点:",asDblArray(pt[i+1]));
AcDbLine *pLine=new AcDbLine(pt[i],pt[i+1]);
AcDbBlockTable *pBlkTable2;
acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pBlkTable2, AcDb::kForRead);
AcDbBlockTableRecord *pBlockTableRecord;
pBlkTable2->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite);
pBlkTable2->close();
AcDbObjectId lineId=AcDbObjectId::kNull;
pBlockTableRecord->appendAcDbEntity(lineId, pLine);
pBlockTableRecord->close();
pLine->close();
changepoint(pt1[i+1],pt[i+1]);//转换点的类型
changepoint(pt1[0],pt[0]);//转换点的类型
i++;
NodeNumCount=i;//取得边数
}
while((Equal_Points (pt1[i], pt1[0]))==0);//起始点=终点时结束循环
}
int Equal_Points (const ads_point p1, const ads_point p2) //判断两点是否为同一点
{
// 指定误差范围
const ads_real Equality_Margin = (ads_real)0.0001;
int c ;
for (c = X ; c  Equality_Margin)
{return (0) ;}
}
{
AcDbLine *pLine=new AcDbLine(pt[0],pt[NodeNumCount]);
AcDbBlockTable *pBlkTable2;
acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pBlkTable2, AcDb::kForRead);
AcDbBlockTableRecord *pBlockTableRecord;
pBlkTable2->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite);
pBlkTable2->close();
AcDbObjectId lineId=AcDbObjectId::kNull;
pBlockTableRecord->appendAcDbEntity(lineId, pLine);
pBlockTableRecord->close();
pLine->close();
return (1) ;
}
}
void changepoint(ads_point& ads_pt,AcGePoint3d acge_pt) //AcGePoint3d转换成ads_point类型
{
double x=acge_pt[0];
double y=acge_pt[1];
double z=acge_pt[2];
ads_pt[X]=x;
ads_pt[Y]=y;
ads_pt[Z]=z;
}
回复

使用道具 举报

5

主题

88

帖子

9

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
108
发表于 2012-8-28 20:55:00 | 显示全部楼层
把多边形变成N个三角形,然后用海伦公式计算就可以了
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 10:44 , Processed in 0.143740 second(s), 56 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表