我编写了以下代码,将曲线旋转指定角度并返回新方程。 我知道当我们想要将轴旋转角度 A 时,新坐标将变为 X=xcosA-ysinA 和 Y=xsinA+ycosA。 当我在双曲线 x^2+y^2=1 上测试我的 fxn 时。预期的方程是 2xy-1=0 但我的 fxn 给出 -2xy-1=0 我哪里做错了?
import sympy as sp
@display_mathjax_and_replace
def rotate(f,theta):
x, y, a, b = sp.symbols('x y a b')
rotation_matrix = sp.Matrix([[sp.cos(theta),-sp.sin(theta)],[sp.sin(theta), sp.cos(theta)]])
transformed_coords = rotation_matrix * sp.Matrix([a, b])
g = f.subs({x: transformed_coords[0], y: transformed_coords[1]})
return g
我创建了以下装饰器来精美地呈现它:
def display_mathjax_and_replace(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
result = result.subs({'a': 'x', 'b': 'y'})
simplified_expr = sp.simplify(result)
display(Math(sp.latex(sp.Eq(simplified_expr, 0))))
return wrapper
我调用我的代码:
x,y = sp.symbols('x y')
f = x**2 - y**2 -1
rotate(f,sp.pi/4)
输出: -2xy-1
预期输出:2xy-1
您交换了变换矩阵的
sin
项上的符号。这是正旋转的样子:
def rotate_1(f, theta):
x, y, a, b = sp.symbols('x y a b')
rotation_matrix = sp.Matrix([[sp.cos(theta),sp.sin(theta)],[-sp.sin(theta), sp.cos(theta)]])
transformed_coords = rotation_matrix * sp.Matrix([a, b])
g = f.subs({x: transformed_coords[0], y: transformed_coords[1]})
return g
rotate(f, sp.pi/4).simplify()
# out: 2*a*b - 1
旋转矩阵不正确。
事情是这样的
X=xcosA+ysinA
和
Y=-xsinA+ycosA
。
用于逆时针旋转。