「毎日Unity」の技術ブログ

開発で役立つ情報を発信する

【UnityC#】3次元空間で点Pから最も近い線分AB上に存在する点を求める方法

3次元空間で点Pから最も近い線分AB上に存在する点を求める方法をメモ。

[ 方法 ]

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class script : MonoBehaviour
{
    // 点Pから最も近い線分AB上に存在する点を求める関数
    private Vector3 ClosestPointOnLineSegment(Vector3 a, Vector3 b, Vector3 p)
    {
        Vector3 vecAB = b - a;
        Vector3 vecAP = p - a;

        float mag = vecAB.magnitude;

        Vector3 unitVecAB = vecAB.normalized;

        float dot = Vector3.Dot(vecAP, unitVecAB);

        dot = Mathf.Clamp(dot, 0f, mag);

        return a + unitVecAB * dot;
    }
}