math - 计算对角线的垂直偏移

标签 math geometry 2d line point

我正在编写一个音乐显示程序,需要在两个音符之间画一个“连线”。
连线是连接两个音符的曲线 - 只是为了清楚。

enter image description here

我知道音符位置并计算曲线的起点和终点应该在哪里 - 起点 和终点 .

我现在需要获取偏移量 C ,给定所需的距离,用于二次曲线。
这就是我对数学公式非常有限的知识和理解的来源。

我确实在 SO 中查看了我的答案,但是提出的解决方案要么不起作用,要么我太有限,无法正确编码。

有人可以帮我计算,在 中非数学形式 ?

最佳答案

给定线段 AB,您可以找到中点,例如 ,使用著名的中点公式(A + B)/2 .现在从 计算向量乙 :

电话 = =

Rotate it about the origin逆时针旋转 90° 得到垂直向量

= = < ‒ p.y, p.x >

标准化:

= /‖n‖ 其中‖n‖ = √(n.x² + n.y²) 是欧几里得范数或长度

C = L(t) = + t

使用这个方程——直线的参数形式——你可以找到沿垂直线的任意数量的点(在 n 的方向上)。 t是获得点的距离, C ,来自 .当t = 0 , 你得到 回来,当t = 1 ,您将获得距离 1 个单位的点男 沿 等等。这也适用于 t 的负值,其中获得的点将在 AB 的另一侧,即朝向音符。自 t可以是十进制数,你可以通过改变它的值来玩它以获得所需的距离和方向从获得的点男 .

代码,因为你说你对数学术语不感兴趣;)

vec2d calculate_perp_point(vec2d A, vec2d B, float distance)
{
   vec2d M = (A + B) / 2;
   vec2d p = A - B;
   vec2d n = (-p.y, p.x);
   int norm_length = sqrt((n.x * n.x) + (n.y * n.y));
   n.x /= norm_length;
   n.y /= norm_length;
   return (M + (distance * n));
}

这只是伪代码,因为我不确定您用于项目的向量数学库。

上面的粗体变量是二维向量;大写字母表示点,小写字母表示没有位置的向量

关于math - 计算对角线的垂直偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17195055/

相关文章:

algorithm - 确定排序数组中的任何数字是否为 `x` 的倍数的最快算法是什么?

python - python 中的数学错误计算 log(det(AA^T)+1)

algorithm - "Center of Mass"在环形包裹 map 上的一组点之间,最小化到所有点的平均距离

java - 如何在 Java 中的二维数组上的循环内创建对象

使用 Java SWING 的 Java 2d 游戏

algorithm - Diffie-Hellman 协议(protocol)可以用作数字签名的基础吗?

JavaScript 小数计算

python - 检测改变点时三角形是否翻转

python - 从整数创建球体包装最近邻列表

javascript - 如何删除二维数组的 Angular 点索引?