将方程式以字符串格式转换为线(几何)对象

时间:2016-04-18 13:02:46

标签: python python-3.x sympy

我的python代码中有一个像background-size: cover; background-size: contain; 这样的线性方程式。我想将此等式转换为同义词类Line的对象y = "x+1"。我尝试通过执行以下操作将字符串解析为sympy表达式:

sympy.geometry.line

,输出为from sympy.parsing.sympy_parser import (parse_expr, standard_transformations, function_exponentiation, implicit_multiplication_application) y = "2*x+1" transformations = (standard_transformations + (implicit_multiplication_application,)) L2 = parse_expr(y, transformations=transformations) print(type(L2))

我不知道下一步要做什么来反对。如果不可能,那么有没有办法将它转换为类的另一个对象,比如python scipy Line对象?

我需要这个,因为我想计算线的斜率,位于线上的点(满足等式的点)来计算与该线平行或垂直的线。

2 个答案:

答案 0 :(得分:1)

我没有看到从方程式创建Line对象的简单方法。我认为最简单的方法是从两个x值(比如说0和1)创建两个Point对象并从中创建一行,比如

p1 = Point(0, L2.subs(x, 0))
p2 = Point(1, L2.subs(x, 1))
Line(p1, p2)

答案 1 :(得分:0)

对于发现此帖子的其他人,此功能现在已在Sympy中存在。

我在Sympy 1.5.1中对此进行了测试

代码:

from sympy import Line, symbols

a,b,c,x,y = symbols('a b c x y')

# Hardcoded line equation
line1 = Line(3*x + 1*y + 18)
print(line1)

# Set the line equation in code
a = 3; b = 1; c = 18
line2 = Line(a*x + b*y + c)
print(line2)

输出:

Line2D(Point2D(0,-18),Point2D(1,-21))
Line2D(Point2D(0,-18),Point2D(1,-21))

不幸的是,对于垂直线它失败了:
1 x + 0 y-100
输出
ValueError:找不到y