c# - 直线和球体的交点?

标签 c# math 3d

我有一个简单的对象,它允许您分配三个属性 (x,y,z)(让我们称这个对象为“点”,因为它就是这样)。然后我有第二个对象,其方法接受第一个对象的两个实例,并返回三维空间中两个“点”之间的距离。我还需要一种接受两个“点”的方法 和一个 double ,表示行进的距离(从使用的第一个“点”参数开始),它返回一个带有 x、y、z 坐标的“点”对象。

除了计算所提供的两个点之间的原始线上的点坐标外,我对所有事情都很好,它与第一个点有一定距离。

“点”对象:

public class POR
{
    private double PORX;
    private double PORY;
    private double PORZ;

    public double X
    {
        get { return PORX; }
        set { PORX = value; }
    }
    public double Y
    {
        get { return PORY; }
        set { PORY = value; }
    }
    public double Z
    {
        get { return PORZ; }
        set { PORZ = value; }
    }
    public POR(double X, double Y, double Z)
    {
        PORX = X;
        PORY = Y;
        PORZ = Z;
    }

然后我使用:

    public double PorDistance(POR por1, POR por2)
    {
        return Math.Round(Math.Sqrt( Math.Pow((por1.X - por2.X),2) + Math.Pow((por1.Y - por2.Y),2) + Math.Pow((por1.Z - por2.Z),2)),2);
    }

要返回这两点之间的距离,我需要类似的东西

public POR IntersectPOR (POR por1, POR por2, double distance)
{

}

distance 是从 por1 到 por2 的距离。

最佳答案

这可以在矢量的帮助下完成。

假设您的起点称为 P,另一点为 Q,距离为 d。您想在从 P 到 Q 的距离为 d 的直线 PQ 上找到点。

  1. 首先您需要找到行进方向。这是通过找到 Q - P 完成的

    v = Point(Q.x - P.x, Q.y - P.y, Q.z - P.z)
    
  2. 现在你需要找到那个方向的单位向量,所以

    scale = sqrt(v.x*v.x + v.y*v.y + v.z*v.z)
    unit = Point(v.x/scale, v.y/scale, v.z/scale)
    
  3. 现在您需要找到表示行进距离的向量:

    t = Point(unit.x*d, unit.y*d, unit.z*d)
    
  4. 要找到最终位置,请将您的行进矢量添加到您的起点:

    final = Point(P.x + t.x, P.y + t.y, P.z + t.z)
    

关于c# - 直线和球体的交点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/910565/

相关文章:

iphone - 如何检测iPhone的高度(用于增强现实游戏)?

javascript - 如何在 Delaunay 三 Angular 剖分中仅标记每个三 Angular 形的一个顶点

c# - 构造函数中的 Xamarin 表单显示警报未显示?

c# - 使用 .NET 的 Windows Shell 集成

javascript - Xamarin Forms - 渲染为 HTML/JavaScript

algorithm - 大数除法余数

c++ - 标准库中有哪些函数可以通过编程技巧更快地实现?

Java 十进制格式

browser - Quake Live 背后的技术是什么?

c# - Entity Framework 并发插入问题