c# - Unity - 关于向量计算的数学问题
问题描述
我正在寻找以下问题的数学公式(在 3 维空间中,所以它大约是 3 维向量)。我在 Unity 中编程 - GameEngine (C#)
在第一张图片中,您可以看到我当前的结果。我创建了 2 个向量(红色球体)并自动生成一个锚点(图中的绿色)。这个锚点总是在第二个向量“后面”生成(在一条直线上)。这两个向量始终是当前向量和前一个向量。我当前的计算(第一张图片)如下所示:
Vector3 direction = newVector.position - previousVector.position;
Vector3 newAnchor.position = newVector.position + direction;
我需要的显示在第二张图片中。我希望始终在第二个向量的“右侧”90 度生成锚点(绿色)(相对于两个向量的方向)。但是,我无法为此得出数学计算。
希望我可以用图片来描述我试图实现的目标。
第一张图:
第二张图:
解决方案
二维
为了将矢量旋转 90 度,您所要做的就是切换x 和 y 分量并取反其中一个。您可以制作扩展方法,允许您直接在向量上调用vector.Left()
& 。vector.Right()
public static class VectorX
{
public static Vector2 Left(this Vector2 v)
{
return new Vector2(-v.y, v.x);
}
public static Vector2 Right(this Vector2 v)
{
return new Vector2(v.y, -v.x);
}
}
3D
您可以使用Cross Product,它返回一个与其他两个垂直的向量。
var right = Vector3.Cross(forward, up).normalized;
因此,如果您给出一个点的前向矢量和向上矢量,您将收到一个指向右侧的矢量。如果你想让它指向左边,你可以否定它。
推荐阅读
- reactjs - 在 React 中通过 url 导航到特定页面
- excel - 如何使用单元格中的值作为导入 CSV 文件的路径
- asp.net-core - ASP Core razor 页面生成与视图模型不同的数据
- c# - 如果“if 语句”成功或失败,如何将我的控制台标题设置为增加
- ios - 如何在 Xcode 10 中启用“推送到远程”?
- javascript - 卡在 Ajax 表单到 mysql 提交
- netcdf - 从 xarray 数据集创建 NetCDF 时经纬度错误
- rstudio - Rstudio:运行 R 代码的方法,但前提是之前的代码行成功?
- reactjs - 如何使 Link/NavLink 路径更短
- c++ - 在一个变量中保存两种不同的返回类型