向量的平面投影 ProjectOnPlane

该博客介绍了Unity3D中如何使用`Vector3.ProjectOnPlane`函数将向量投影到由法向量定义的平面上。通过示例代码展示了投影的计算过程,并提供了效果演示,包括绘制向量、投影向量和法线。此外,还给出了一个简单的编辑器脚本,用于可视化投影操作。
摘要由CSDN通过智能技术生成

1 定义 - ProjectOnPlane

 //
// 摘要:
//     Projects a vector onto a plane defined by a normal orthogonal to the plane.
//
// 参数:
//   planeNormal:
//     The direction from the vector towards the plane.
//
//   vector:
//     The location of the vector above the plane.
//
// 返回结果:
//     The location of the vector on the plane.
public static Vector3 ProjectOnPlane
			(
			Vector3 vector, 
			Vector3 planeNormal
			);

2 使用方法

  • 参数1 方向
  • 参数2 平面的法向量

投影向量

var pj = Vector3.ProjectOnPlane(dir, normal);

返回值是一个投影向量,平行于指定的平面

3 效果演示

请添加图片描述

4 参考代码

using UnityEditor;
using UnityEngine;

public class Pj : MonoBehaviour
{

    void Update()
    {
        project();
    }

    //方向向量目标点 看向点
    public Transform target,looker;
    //两点确定法线方向
    public Transform n1, n2;
    //跟随点
    public Transform sign;

    void project()
    {
        looker.transform.LookAt(target);

        //指向目标的向量
        var dir = target.position - transform.position;
        //平行于X轴平面的法向量 Y轴正方向向量 (1,0,0)
        var normal = n1.position - n2.position;
        //投影向量
        var pj = Vector3.ProjectOnPlane(dir, normal);
        //相对本对象位置进行变化
        sign.position = transform.position + pj;

        //绘制方向
        Debug.DrawLine(transform.position, target.position);
        //绘制投影
        Debug.DrawLine(transform.position, sign.position, Color.blue);
        //绘制法线
        Debug.DrawLine(target.position, sign.position,Color.red);
    }

    //绘制平面
    private void OnDrawGizmos()
    {
        //平行于X轴平面的法向量 Y轴正方向向量 (1,0,0)
        var dir = n1.position - n2.position;

        Handles.color = Color.yellow;
        for (int i = 0; i < 10; i++)
        {
            var dis = i + 1;
            Handles.DrawWireDisc(transform.position, dir, dis * 0.1f);
        }
    }
}

5 工程包
链接

6 投影函数 Project
请添加图片描述
7 函数返回值
是vector向量 想X轴正方形进行投影,最终落在X轴的一个点
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值