本文整理汇总了C++中Plane::IsParallel方法的典型用法代码示例。如果您正苦于以下问题:C++ Plane::IsParallel方法的具体用法?C++ Plane::IsParallel怎么用?C++ Plane::IsParallel使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Plane
的用法示例。
在下文中一共展示了Plane::IsParallel方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Intersects
bool Plane::Intersects(const Plane &plane, const Plane &plane2, Line *outLine, vec *outPoint) const
{
Line dummy;
if (!outLine)
outLine = &dummy;
// First check all planes for parallel pairs.
if (this->IsParallel(plane) || this->IsParallel(plane2))
{
if (EqualAbs(d, plane.d) || EqualAbs(d, plane2.d))
{
bool intersect = plane.Intersects(plane2, outLine);
if (intersect && outPoint)
*outPoint = outLine->GetPoint(0);
return intersect;
}
else
return false;
}
if (plane.IsParallel(plane2))
{
if (EqualAbs(plane.d, plane2.d))
{
bool intersect = this->Intersects(plane, outLine);
if (intersect && outPoint)
*outPoint = outLine->GetPoint(0);
return intersect;
}
else
return false;
}
// All planes point to different directions.
float3x3 m;
m.SetRow(0, DIR_TO_FLOAT3(normal));
m.SetRow(1, DIR_TO_FLOAT3(plane.normal));
m.SetRow(2, DIR_TO_FLOAT3(plane2.normal));
float3 intersectionPos;
bool success = m.SolveAxb(float3(d, plane.d, plane2.d), intersectionPos);
if (!success)
return false;
if (outPoint)
*outPoint = POINT_VEC(intersectionPos);
return true;
}
示例2: Intersects
bool Plane::Intersects(const Plane &plane, const Plane &plane2, Line *outLine, float3 *outPoint) const
{
Line dummy;
if (!outLine)
outLine = &dummy;
// First check all planes for parallel pairs.
if (this->IsParallel(plane) || this->IsParallel(plane2))
{
if (EqualAbs(d, plane.d) || EqualAbs(d, plane2.d))
{
bool intersect = plane.Intersects(plane2, outLine);
if (intersect && outPoint)
*outPoint = outLine->GetPoint(0);
return intersect;
}
else
return false;
}
if (plane.IsParallel(plane2))
{
if (EqualAbs(plane.d, plane2.d))
{
bool intersect = this->Intersects(plane, outLine);
if (intersect && outPoint)
*outPoint = outLine->GetPoint(0);
return intersect;
}
else
return false;
}
// All planes point to different directions.
float3x3 m;
m.SetRow(0, normal);
m.SetRow(1, plane.normal);
m.SetRow(2, plane2.normal);
bool success = m.Inverse();
if (!success)
return false;
if (outPoint)
*outPoint = m * float3(d, plane.d, plane2.d);
return true;
}