将直线旋转给定角度

Abh*_*tia 3 math geometry netlogo

给定线 A 、 B 和 C 的系数。

Ax + By + C = 0
Run Code Online (Sandbox Code Playgroud)

我希望以顺时针或逆时针方向旋转x角度的线。我怎样才能实现这一点以便获得新的系数?(在NetLogo中)

编辑:抱歉,将点视为 x_0 和 y_0

MBo*_*MBo 6

你的直线方程

x * A + y * B + C = 0
Run Code Online (Sandbox Code Playgroud)

可以以正常形式表示为

x * Cos(Theta) + y * Sin(Theta) - p = 0
Run Code Online (Sandbox Code Playgroud)

在哪里

Theta = ArcTan(B/A)
- OX 轴与法式坐标原点到直线之间的角度

p = -C/Sqrt(A^2 + B^2)-
从原点到线的距离(正常长度)。

如果要将直线相对于坐标原点 (0,0) 旋转角度 Alpha,只需创建新方程(注意相同的 p 值): Beta = Theta + Alpha

x * Cos(Beta) + y * Sin(Beta) - p = 0
Run Code Online (Sandbox Code Playgroud)

如果要绕任意点 (x0, y0) 旋转直线:从该点到直线的法向距离为

d = x0 * Cos(Theta) + y0 * Sin(Theta) - p
Run Code Online (Sandbox Code Playgroud)

新方程将

x * Cos(Beta) + y * Sin(Beta) - pnew = 0
Run Code Online (Sandbox Code Playgroud)

并保持正常距离:

d = x0 * Cos(Beta) + y0 * Sin(Beta) - pnew
Run Code Online (Sandbox Code Playgroud)

所以

pnew = p + x0 * (Cos(Beta)-Cos(Theta)) + y0 * (Sin(Beta)-Sin(Theta))
Run Code Online (Sandbox Code Playgroud)