我现在正在开发一个图形处理的软件,其中有关于判断凸多边形的问题。我现在是自己写了一个算法判断是否为凸多边形(本身的线段互不相交、对于任一线段,其他的点都在左侧或都在右侧),而这种做法用户不认可,让我调查GDI中现在的API函数,有谁知道GDI中是否有关于判断一组点所构成的多边形是凸多边形的API函数。多谢指教~
解决方案 »
- 求救:重载的全局operator new和operator delete对CObject无效!
- 太诡异了,头文件里定义CString类型变量居然要按顺序!!
- 在win98和2000/xp下同时支持多语言的问题,不知道是否能用win32API设置代码页的方法解决该问题
- 国内30M免费主页空间 支持asp,ftp,要申请的请尽快!
- CPropertySheet 的用法
- Access中的数据类型在ODBC中问题!
- 如何用(Getpixel+Setpixel)高效率处理图象,或者直接取下一个具有HDC属性的图象控件的某个点的象素,自己写个API???
- 关于多媒体的问题(CODEGURU论坛上许多人问这个问题,没有人回答)
- C++ poencv 的代码错误,帮忙解决下,感激不尽
- 怎样生成动态控件数组?
- 紧急求救:如何将文本文件输入CHtmlView并且为文本中的邮件地址自动添加链接?
- 请问如何将avi文件中的声音取出来变成一个wav文件?(谢谢各位高手)
// lNumPoint--》多边形的点数;
// PL3DTop--》多边形的顶点数组,点序以逆时针排序;
// 返回值为true,表示该多边形为凹多边形,否则为凸多边形。
bool IsConcavePolygon(long lNumPoint, CPolyLine3D& PL3DTop)
{
int i, i1, j1;
double dAxisCos[3][3];
CPoint3D pt0, pt2, pt5;
CPoint3DArray Point3DArray; if(lNumPoint<4)return false;
// 判断凹凸多边形。
Point3DArray.SetSize(3);
for(i=0;i<lNumPoint-1;i++)
{
i1 = i+1;
Point3DArray[0].x = PL3DTop.P3Ds[i].P3D[X];
Point3DArray[0].y = PL3DTop.P3Ds[i].P3D[Y];
Point3DArray[0].z = PL3DTop.P3Ds[i].P3D[Z];
Point3DArray[1].x = PL3DTop.P3Ds[i1].P3D[X];
Point3DArray[1].y = PL3DTop.P3Ds[i1].P3D[Y];
Point3DArray[1].z = PL3DTop.P3Ds[i1].P3D[Z];
if(i==0)
{
j1 = lNumPoint-2;
Point3DArray[2].x = PL3DTop.P3Ds[j1].P3D[X];
Point3DArray[2].y = PL3DTop.P3Ds[j1].P3D[Y];
Point3DArray[2].z = PL3DTop.P3Ds[j1].P3D[Z];
}
else
{
j1 = i-1;
Point3DArray[2].x = PL3DTop.P3Ds[j1].P3D[X];
Point3DArray[2].y = PL3DTop.P3Ds[j1].P3D[Y];
Point3DArray[2].z = PL3DTop.P3Ds[j1].P3D[Z];
}
pt0 = Point3DArray[0];
CoordAxis(Point3DArray, false, dAxisCos);
Tranformation3DCoordinate(pt0, Point3DArray[2], dAxisCos, pt2);
if(pt2.y<0)
{
Point3DArray.RemoveAll();
return true;
}
}
Point3DArray.RemoveAll();
return false;
}