- UID
- 149566
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2004-6-14
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
希望晓东版主再提供一下DB实体类转GE类的函数,我在论坛上看到你说已经发在论坛上了,但是用AcGeCurve3d却怎样也找不到。
这里也贴一段我的有关求闭合曲线面心点的算法,增加论坛一些实质性的东西
//计算面的内心点通过的线
BOOL CMathOperator::computePolygonNxPntLine(AcGePoint3dArray pntArray,AcGePoint3d &pnt1,AcGePoint3d &pnt2)
{
AcGePlane plane;
AcGePoint3dArray rsPntArray,midlinePntArray,crsPnts;
if(pntArray.first().convert2d(plane)!=pntArray.last().convert2d(plane))
pntArray.append(pntArray.first());
ComputeOutsideFourPntofPntArray(pntArray,rsPntArray);//计算外包最小矩形
/////////////
double dx,dy;
dx=rsPntArray.first().convert2d(plane).distanceTo(rsPntArray[1].convert2d(plane));
dy=rsPntArray.first().convert2d(plane).distanceTo(rsPntArray.last().convert2d(plane));
if(dx>dy)//计算用于求交的中线,取长宽中的大值
{
midlinePntArray.append(GetMidPnt(rsPntArray[0],rsPntArray[1]));
midlinePntArray.append(GetMidPnt(rsPntArray[3],rsPntArray[2]));
}
else
{
midlinePntArray.append(GetMidPnt(rsPntArray[1],rsPntArray[2]));
midlinePntArray.append(GetMidPnt(rsPntArray[0],rsPntArray[3]));
}
CCommonHanlder cmnHdl;
if(!cmnHdl.getSJD(pntArray,midlinePntArray,crsPnts))//计算中线与点集的交点数组
return FALSE;
PntSortByXY(crsPnts,dx>dy?Y:X);//分治排序
/////////////////////////
double minDist=0;
for(int i=0;i<crsPnts.length()-1;i+=2)
{
AcGePoint3d tmpPnt1,tmpPnt2;
double dist;
tmpPnt1=crsPnts;
tmpPnt2=crsPnts[i+1];
dist=tmpPnt1.convert2d(plane).distanceTo(tmpPnt2.convert2d(plane));
if(dist>minDist)//取交点中最长的线段
{
minDist=dist;
pnt1=tmpPnt1;
pnt2=tmpPnt2;
}
}
return TRUE;
}
计算到线段后,考虑点集中是否存在孤岛情况,如果有,求交取外部最长线段,取中点坐标,
如果没有,取中点坐标,就是面的面心点 |
|