使用Python旋转曲线

问题描述 投票:0回答:2

我编写了以下代码,将曲线旋转指定角度并返回新方程。 我知道当我们想要将轴旋转角度 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

python plot sympy
2个回答
0
投票

您交换了变换矩阵的

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

0
投票

旋转矩阵不正确。

事情是这样的

X=xcosA+ysinA
Y=-xsinA+ycosA

用于逆时针旋转。

© www.soinside.com 2019 - 2024. All rights reserved.