我正在编写一个音乐显示程序,需要在两个音符之间画一个“连线”。
连线是连接两个音符的曲线 - 只是为了清楚。
我知道音符位置并计算曲线的起点和终点应该在哪里 - 起点 和终点乙 .
我现在需要获取偏移量 C ,给定所需的距离,用于二次曲线。
这就是我对数学公式非常有限的知识和理解的来源。
我确实在 SO 中查看了我的答案,但是提出的解决方案要么不起作用,要么我太有限,无法正确编码。
有人可以帮我计算,在 中非数学形式 ?
最佳答案
给定线段 AB,您可以找到中点,例如 男 ,使用著名的中点公式(A + B)/2
.现在从 计算向量乙 至 :
电话 =
Rotate it about the origin逆时针旋转 90° 得到垂直向量
=
标准化:
=
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/