• 计算点在线上的投影坐标


    如题

    计算点到线上的垂点,首先明确:
    该线段必须给出确切的起始点和终点, 而不是一个向量,因为一个向量并不能代表一个线段。
    所以参数列表如下:

    Vector3 VerticalPoint(Vector3 point, Vector3 lStart, Vector3 lEnd);
    
    • 1

    下图中蓝色标记的是未知量,黑色为已知量
    求点target的位置

    数学方法求解:

    求解过程

    • 因为pointLStartLEnd都已知,
      所以向量vector = LEnd- LStartguideLine = point - LStart 都已知
      首先由向量的点积公式可知
      v e c t o r ⋅ g u i d e L i n e = ∣ v e c t o r ∣ ∣ g u i d e L i n e ∣ c o s θ vector ·guideLine = |vector||guideLine|cosθ vectorguideLine=vector∣∣guideLinecosθ
    • 又因为需要的是点到线段上的垂点
      且由直角三角形的定义可知
      我们可以求得|target - LStart|长度,
      |guideLine| * cosθ
      由此即可得到目标点相对LStart的偏移量
    • 由向量性质可知
      向量归一化后其长度为一,所以我们可以将vector向量转化为单位向量
      因为|vector.normalize| == 1,所以当vector = vector.normalize ,则|vector| == 1
      此时我们的公式就化为了:
      v e c t o r . n o r m a l i z e ⋅ g u i d e L i n e = ∣ g u i d e L i n e ∣ c o s θ vector.normalize ·guideLine = |guideLine|cosθ vector.normalizeguideLine=guideLinecosθ
      接着:
      ∣ t a r g e t − L S t a r t ∣ = ∣ g u i d e L i n e ∣ c o s θ = v e c t o r . n o r m a l i z e ⋅ g u i d e L i n e = 偏移量 |target - LStart| = |guideLine|cosθ = vector.normalize · guideLine = 偏移量 targetLStart=guideLinecosθ=vector.normalizeguideLine=偏移量
      此时vector.normalizeguideLine 均可知
      所以 target = LStart + vector * 偏移量

    C#代码

    public static Vector3 VerticalPoint(Vector3 point, Vector3 lStart, Vector3 lEnd)
    {
        Vector3 guideLine = point - lStart;
        Vector3 vector = lEnd - lStart;
        //float magnitude = vector.magnitude;	
    	vector = vector.normalized;
    	float num2 = Vector3.Dot(vector, guideLine);
    	//有需要的话可以将值限制在范围之间,比如这里限制在 线段内部
        //float num2 = Mathf.Clamp(Vector3.Dot(vector, guideLine), 0f, magnitude);	
        return lStart + (vector * num2);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    使用 Fody 实现 .NET 的静态织入
    docker启动fastdfs
    Haiku OS 在 osx 上的编译与运行
    低成本打造便携式无线网络攻防学习环境
    快速全面掌握数据库系统核心知识点
    常见docker命令(二)-容器生命周期相关
    理解与应用排序算法(快速排序C实现)
    基于显扬科技自主研发3D机器视觉HY-M5在物流行业包裹分拣中的应用
    GPT & R 生态环境领域数据统计分析
    万字长文Python面试题,建议先收藏
  • 原文地址:https://blog.csdn.net/KamikazePilot/article/details/128068077