问题标签 [vectormath]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
153 浏览

c++ - 如何在非轴对齐框(任意旋转的框)内找到点的相对偏移量

我正在尝试解决一个问题,即在可以任意旋转和平移的空间内存在的盒子内找不到点的相对偏移量。

我知道盒子的 WorldSpace 位置(及其 4 个角,图像上的坐标是相对的)及其旋转。这些可以是任意的(它实际上是游戏中的 3D 触发体积,但我们只关心它在自上而下的 2D 平面中)。

在此处输入图像描述

看着它与轴对齐,红点相对位置将是

0.25, 0.25

如果要任意旋转盒子,我似乎无法弄清楚如何保持这一点,因为我们对同一点进行采样(它的世界位置将发生变化),即使盒子的世界旋转已经改变,它的相对位置也不会改变。

在此处输入图像描述

作为参考,红点表示存在于 Box 所包含的场景中的对象。

目前,您可以通过上面的代码看到我只使用 Box 的左上角和右下角来尝试计算偏移量,我知道这不是一个足够的解决方案,因为这样做不允许旋转(Id 需要也使用其他两个角)但是我一生都无法弄清楚我需要做什么才能达到解决方案。

这会将一个范围转换为另一个范围。例如,(20 - 50) 变为 (0 - 1)。

任何有关如何解决此问题的帮助/建议将不胜感激。

谢谢。

更新

@Voo 的评论帮助我意识到解决方案比预期的要简单得多。

在此处输入图像描述

通过知道框的 3 个角的位置,我能够找到这 3 个位置创建的 2 条线上的点,然后简单地将这些点映射到 0-1 范围内,无论框如何被翻译。

上面的代码是原始问题的修改代码,具有正确的解决方案。

0 投票
1 回答
475 浏览

c# - 如何在一条线的两点(Vector2)之间找到一个点(vector2)(线渲染器)

正如问题所解释的,如何在一条线(线渲染器)的两个点(Vector2)之间找到一个点(vector2),

例子

我正在使用线渲染器用两个点(从矢量和端点开始)绘制线,我想要的是想要在线中的点 A,如您在图像中看到的那样。

理论上,我想为我的用例缩短线的原始长度,我正在对两条线重叠进行线交叉检查,但问题是在某些情况下线从同一点开始,在那些情况下,如果点相交,仍然算作线交点。所以理论上我想缩短线相交检查的线,这样如果点相遇,它就不会与另一条线相交。

这是我的线交叉检查的脚本!

任何建议和帮助将不胜感激。

0 投票
1 回答
21 浏览

javascript - 如何在不计算角度的情况下根据它们的相对角度获得两个向量的顺序?

我已经说明了我在这里寻找的东西。

如果从图像中看不清楚,这就是我的问题:

我有两个具有相同原点的向量。我希望能够检查 v1 是否在 v2 的左侧。就好像 v1 是一个轴,如果有意义的话,我希望 v2 与它有一个正角度。

我已经尝试过使用 atan2(x, y) 但我不知道当一个向量 < 0 而另一个向量 > 0 时如何使值保持一致(当两个向量都朝下时)

我读过可能会做一个二维叉积(这在技术上不是一件事,但它是通过将两个向量投影到一个轴上来完成的)但我不知道如何实现它,我不知道它是否是一个工作解决方案。

我正在将 Javascript 用于 html 画布游戏引擎,但这与问题无关,因为在这种情况下我只需要知道如何进行数学运算。


我希望我清楚我的问题是什么。

谢谢!

0 投票
1 回答
95 浏览

flutter - Vector2List 未按预期工作:Dart // Flutter

我正在开发一个游戏并使用 Vector2List 来表示许多粒子的位置。假设我想将 X 值增加 4。

当我使用单个 Vector2 时,我可以做这样的事情,一切都很好:

其中 position 是 Vector2 的一个实例

如果 Vector2 是 {3, 5} 那么它变成 {7, 5}(一切正常)。

但是,如果我使用的是矢量列表,我会执行以下操作:

其中 i 是粒子索引,位置是 Vector2List 的一个实例

然后它从 {3, 5} 变为 {3, 5}(完全没有变化!)。
我发现完成这项工作的唯一方法是使用函数集值,但它看起来不应该是强制性的。难道我做错了什么?

什么不工作

什么在起作用

示例代码

结果是

我的软件
Flutter 版本 Channel Stable 2.0.1
Dart SDK 版本:2.12.0 (stable)
我正在使用空安全。

请原谅任何英语错误,我不是母语人士。

谢谢!

0 投票
3 回答
199 浏览

algorithm - 以最少的迭代次数找到所需方向的算法

这个问题包含三个组成部分:

  1. 一个三维向量A
  2. “平滑”函数F
  3. 所需的向量B(也是三维的)。

我们想找到一个向量A,当它通过F时会产生向量B

F可以是以某种方式以某种方式改变或扭曲A的任何东西。关键是我们要迭代调用F(A)直到产生B。

问题是:

我们如何做到这一点,但在找到等于B的向量(在合理阈值内)之前调用F的次数最少?

0 投票
0 回答
84 浏览

c++ - 使用 neon/simd 优化 Vector3 类

我想知道是否值得像我对 Vector2 类所做的那样使用 neon/simd 优化我的 Vector3 类的操作。

据我所知,simd 只能同时处理两个或四个浮点数,所以对于我的 Vector3,我们需要这样的东西:

这安全吗?在大多数情况下,这个额外的步骤是否仍然比非 simd 代码更快(例如 arm64)?

0 投票
2 回答
106 浏览

python - 决定使用哪个碰撞段作为反射的影响向量

问题

我正在开发一个简单的 OpenGL 项目。我的目标是从受影响的物体上正确地反射一个受力的物体。

为此,我使用形状的线段(线段是组成一条线的两个点)进行碰撞检测。例如,正方形的段将是:

检测的工作原理是检查对象的任何片段是否与外部对象的片段相交。我正在使用 geeksforgeeks 中解释的方法:https ://www.geeksforgeeks.org/check-if-two-given-line-segments-intersect/

为了计算反射,我使用公式 r=d−2(d⋅n)n
在此处输入图像描述

  • d : 力向量
  • b : 受影响的表面矢量
  • n : 撞击表面上的归一化(单位向量)法线向量 90 度
  • r : 力向量的反射向量

然而; 在发现一个物体与另一个物体发生碰撞后,找到这个反射向量就会出现问题。

在此处输入图像描述

例如,当两个正方形发生碰撞(我实现的唯一形状)时,碰撞检测有时会检测到两个段上的碰撞。因为我不知道我应该如何选择哪一个作为受影响的部分,所以反射有时会出现在错误的方向上。

问题

如何确定图像中绿色的哪一部分应该用作反射的影响矢量?

编辑:
我现在已经实施了 Blindman67 建议的解决方案。碰撞检测(决定碰撞哪一侧)似乎在大约 80% 的情况下有效。当靠近角落碰撞时,正方形有时仍会反射到错误的方向。我不确定这是我的错误还是给定的解决方案。

我一直无法解决问题。

此外,当受影响的方格在两侧被吞下时,检查不再成立,使受影响的线彼此平行。

这是我想出的逻辑:

这是一个图像,描述了反射方法从 rect_rect_collision 方法接收到的不正确的影响向量: 不正确的影响向量

绿色轮廓是可碰撞的刚体,红色箭头是反射前的力矢量方向。计算反射后,反射将在错误的方向。