Признак заданного диапазона неявного сюжета (сущность отключена) - PullRequest
0 голосов
/ 26 декабря 2018

Мне не удается установить диапазон, чтобы круг не обрезался.Я надеюсь, что кто-то может мне помочь.

Отредактированный код:

Я хочу отразить точку 'V' на линии g.

from sympy import symbols
from sympy.plotting import plot
from sympy.plotting import plot_implicit
from sympy.geometry import Circle
from sympy import solve
import numpy as np   

x, y = symbols(['x', 'y'])
g = 4*x-3*y+1
V = np.array([5,2])
n = np.array([4, -3])
abs_n = np.linalg.norm(n)
hnf_g = abs(g/abs_n)
mirrored_V = V - 2*hnf_g.evalf(subs={x:V[0], y:V[1]}) * n/abs_n
y_g = solve(g,y)

p = plot(y_g[0], show=False, xlim=(-10,10), ylim=(-10,10))
p.extend(plot_implicit(Circle(V,1).equation(), var_start_end_x=(x,-10,10), var_start_end_y=(y,-10,10)))
p.extend(plot_implicit(Circle(mirrored_V,1).equation(), var_start_end_x=(x,-10,10), var_start_end_y=(y,-10,10)))
p.show()

Новый результат:

New result

Старый:

Это результат для всего участка: whole plot

Если бы я только взглянул на неявный сюжет: only implicit plot with the circle

1 Ответ

0 голосов
/ 31 декабря 2018

Из документов для plot_implicit это можно сделать, установив диапазон, как показано в третьем примере, скопированном ниже.

p2 = plot_implicit(Eq(x**2 + y**2, 3), (x, -3, 3), (y, -3, 3))

Но для этого требуется Eq объект, который, к сожалению, либо не может быть сконструирован из Circle для этих целей - возможно, в результате ошибки, которая пропускает bool вместо bool кортежа - или я что-то упустил.Если это первое, тогда

Eq(Circle(Point(0,0),1).equation())

недостаточно, и вы должны явно построить уравнение окружности, то есть

Eq((x - 5)**2 + (y - 2)**2 - 1, 1)

Полный пример

from sympy import symbols
from sympy.plotting import plot
from sympy.plotting import plot_implicit
from sympy.geometry import Circle
from sympy import solve
import numpy as np   

x, y = symbols(['x', 'y'])
g = 4*x-3*y+1
V = np.array([5,2])
n = np.array([4, -3])
abs_n = np.linalg.norm(n)
hnf_g = abs(g/abs_n)
mirrored_V = V - 2*hnf_g.evalf(subs={x:V[0], y:V[1]}) * n/abs_n
y_g = solve(g,y)

p = plot(y_g[0], show=False, xlim=(-10,10), ylim=(-10,10))
p.extend(plot_implicit(Eq((x - V[0])**2 + (y - V[1])**2, 1), (x,-10,10), (y,-10,10), show=False))
p.extend(plot_implicit(Eq((x - mirrored_V[0])**2 + (y - mirrored_V[1])**2, 1), 
                   (x,-10,10), (y,-10,10), show=False))
p.show()

image

...