欢迎光临散文网 会员登陆 & 注册

轮子:UE4中计算直线和圆的交点

2023-06-06 17:58 作者:小强强  | 我要投稿

UE4.18中只提供了判断直线和圆是否相交的API(FMath::LineSphereIntersection),现在有个需求要求交点,只能自己动手写了


TArray<FVector> LineSphereIntersection(const FVector& LineOrigin, const FVector& LineDir, const FVector& circleOrigin, float radius) 

{

    TArray<FVector> IntersectionPoints;

    // 求圆心到直线最近的点

    FVector CloestPoint = FMath::ClosestPointOnLine(LineOrigin, LineDir, circleOrigin); 

   // 圆心到直线的距离

   float dist = (CloestPoint - circleOrigin).Size();

   if(dist > radius) 

   {

       // 距离大于圆的半径,没有交点

   }

   else if(dist == radius)

   {

        // 距离等于半径,交点就是最近的点

        IntersectionPoints.Add(ClosestPoint);

    }

   else

   { 

       // 距离小于半径,交点有2个

        // 斜边边长 = 半径, 一条直角边长 = 圆心到直线的距离

        float HypotenuseLength = FMath::Sqrt(radius * radius - dist * dist);

       FVector Point1 = ClosestPoint + LineDir * HypotenuseLength;

       IntersectionPoints.Add(Point1); 

       FVector Point2 = ClosestPoint - LineDir * HypotenuseLength; 

       IntersectionPoints.Add(Point2);

     }

       return IntersectionPoints;

  }



为什么没有代码格式的排版……

轮子:UE4中计算直线和圆的交点的评论 (共 条)

分享到微博请遵守国家法律