本文整理汇总了C++中Plane::Project方法的典型用法代码示例。如果您正苦于以下问题:C++ Plane::Project方法的具体用法?C++ Plane::Project怎么用?C++ Plane::Project使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Plane
的用法示例。
在下文中一共展示了Plane::Project方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DiagonalExists
bool Polygon::DiagonalExists(int i, int j) const
{
assume(p.size() >= 3);
assume(i >= 0);
assume(j >= 0);
assume(i < (int)p.size());
assume(j < (int)p.size());
#ifndef MATH_ENABLE_INSECURE_OPTIMIZATIONS
if (p.size() < 3 || i < 0 || j < 0 || i >= (int)p.size() || j >= (int)p.size())
return false;
#endif
assume(IsPlanar());
assume(i != j);
if (i == j) // Degenerate if i == j.
return false;
if (i > j)
Swap(i, j);
assume(i+1 != j);
if (i+1 == j) // Is this LineSegment an edge of this polygon?
return false;
Plane polygonPlane = PlaneCCW();
LineSegment diagonal = polygonPlane.Project(LineSegment(p[i], p[j]));
// First check that this diagonal line is not intersected by an edge of this polygon.
for(int k = 0; k < (int)p.size(); ++k)
if (!(k == i || k+1 == i || k == j))
if (polygonPlane.Project(LineSegment(p[k], p[k+1])).Intersects(diagonal))
return false;
return IsConvex();
}
示例2: IsSimple
bool Polygon::IsSimple() const
{
assume(IsPlanar());
Plane plane = PlaneCCW();
for(int i = 0; i < (int)p.size(); ++i)
{
LineSegment si = plane.Project(Edge(i));
for(int j = i+2; j < (int)p.size(); ++j)
{
if (i == 0 && j == (int)p.size() - 1)
continue; // These two edges are consecutive and share a vertex. Don't check that pair.
LineSegment sj = plane.Project(Edge(j));
if (si.Intersects(sj))
return false;
}
}
return true;
}
示例3: Contains
bool Polygon::Contains(const LineSegment &worldSpaceLineSegment, float polygonThickness) const
{
if (p.size() < 3)
return false;
Plane plane = PlaneCCW();
if (plane.Distance(worldSpaceLineSegment.a) > polygonThickness ||
plane.Distance(worldSpaceLineSegment.b) > polygonThickness)
return false;
// For robustness, project onto the polygon plane.
LineSegment l = plane.Project(worldSpaceLineSegment);
if (!Contains(l.a) || !Contains(l.b))
return false;
for(int i = 0; i < (int)p.size(); ++i)
if (plane.Project(Edge(i)).Intersects(l))
return false;
return true;
}