Есть ли способ нарисовать ломаную или контурные линии, чтобы заполнить треугольник в python или opencv? - PullRequest
0 голосов
/ 27 мая 2019

Эта запись дает отличный способ нарисовать линию, чтобы заполнить треугольник (назовите эту цифру_1), как

enter image description here

Оригинальный пост написан на языке Wolfram Language, я пытаюсь нарисовать похожий сюжет на Python.

Вот код:

import numpy as np
xlist = np.linspace(-3.0, 3.0, 3)
ylist = np.linspace(-3.0, 3.0, 3)
X, Y = np.meshgrid(xlist, ylist)
Z = np.sqrt(X**2 + Y**2)

import matplotlib.pyplot as plt
f, ax = plt.subplots(figsize=(6,6))
cp = ax.contour(X, Y, Z, levels = [0.25,1,2,3], colors=('k','r',))
ax.clabel(cp, inline=True, fontsize=10)
plt.title('Contour Plot')
plt.grid(True)
plt.show()

Выходной участок:

enter image description here

, которая является ромбом, а не желаемым треугольником, есть ли способ нарисовать ломаную линию или контурные линии, как figure_1?

1 Ответ

1 голос
/ 27 мая 2019

plt.tricontour может удовлетворить ваши потребности.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.tri as tri




# first load some data:  format x1,x2,x3,value
test_data = np.array([[0,0,1,0],
                      [0,1,0,0],
                      [1,0,0,0],
                      [0.25,0.25,0.5,1],
                      [0.25,0.5,0.25,1],
                      [0.5,0.25,0.25,1]])

# barycentric coords: (a,b,c)
a=test_data[:,0]
b=test_data[:,1]
c=test_data[:,2]

# values is stored in the last column
v = test_data[:,-1]

# translate the data to cartesian corrds
x = 0.5 * ( 2.*b+c ) / ( a+b+c )
y = 0.5*np.sqrt(3) * c / (a+b+c)


# create a triangulation out of these points
T = tri.Triangulation(x,y)

# plot the contour
plt.tricontour(x,y,T.triangles,v)
plt.show()

участок

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...