Возникла проблема при Python построении 3D-линии - PullRequest
0 голосов
/ 16 февраля 2020

У меня возникли проблемы при попытке построить график в 3D. Принцип использования параметров ЦО, хотя это не очень важно. Точки, которые на самом деле строят, пропуская текущие линии 74-76, находятся в нужном месте и хорошо проецируются в 2D. Я новичок в Python и не могу понять, почему это не чертит в 3D. Часть этого, включая настройку фигуры, была сделана моим профессором, поэтому некоторые из них могут быть неправильными, но я не уверен, почему эта проблема продолжает возникать. Он продолжает выдавать мне ошибку о входных параметрах .plot и говорит, что у него слишком много, но я видел очень много 3D-примеров с использованием plot, поэтому я действительно пытаюсь это выяснить.

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np 

#All the joints set to angles of 45 degrees.
#Link 1
d1=0.1; theta1=45*np.pi/180; a1=1; alpha1=0
#Link 2
d2=0.1; theta2=0*np.pi/180; a2=1; alpha2=0
#Link 3
d3=0.1; theta3=45*np.pi/180; a3=1; alpha3=0

Link2_1_T=np.array([[np.cos(theta1), -np.sin(theta1)*np.cos(alpha1), np.sin(theta1)*np.sin(alpha1), a1*np.cos(theta1)],
                [np.sin(theta1), np.cos(theta1)*np.cos(alpha1), -np.cos(theta1)*np.sin(alpha1), a1*np.sin(theta1)],
                [0, np.sin(alpha1), np.cos(alpha1), d1],
                [0, 0, 0, 1]])
Link3_2_T=np.array([[np.cos(theta2), -np.sin(theta2)*np.cos(alpha2), np.sin(theta2)*np.sin(alpha2), a2*np.cos(theta2)],
                [np.sin(theta2), np.cos(theta2)*np.cos(alpha2), -np.cos(theta2)*np.sin(alpha2), a2*np.sin(theta2)],
                [0, np.sin(alpha2), np.cos(alpha2), d2],
                [0, 0, 0, 1]])
Link4_3_T=np.array([[np.cos(theta3), -np.sin(theta3)*np.cos(alpha3), np.sin(theta3)*np.sin(alpha3), a3*np.cos(theta3)],
                [np.sin(theta3), np.cos(theta3)*np.cos(alpha3), -np.cos(theta3)*np.sin(alpha3), a3*np.sin(theta3)],
                [0, np.sin(alpha3), np.cos(alpha3), d3],
                [0, 0, 0, 1]])

End_Coord=np.array([[0,0,0,1]])
End_Coord=End_Coord.T

##XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Joint1Link0=End_Coord
Joint2Link1=np.dot(Link2_1_T,End_Coord)
Joint3Link2=np.dot(Link2_1_T, np.dot(Link3_2_T,End_Coord))
Joint4Link3=np.dot(Link2_1_T, np.dot(Link3_2_T, np.dot(Link4_3_T, End_Coord)))


##XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
fig=plt.figure()
ax=fig.add_subplot(111)
# Insert Plotting Code Here

x = [Joint1Link0[0], Joint2Link1[0], Joint3Link2[0], Joint4Link3[0]]
y = [Joint1Link0[1], Joint2Link1[1], Joint3Link2[1], Joint4Link3[1]]
plt.plot(x[0], y[0], 'bo')
plt.plot(x[1], y[1], 'ro')
plt.plot(x[2], y[2], 'go')
plt.plot(x[3], y[3], 'go')

plt.plot([x[0], x[1]],[y[0], y[1]], 'b-')
plt.plot([x[1], x[2]],[y[1], y[2]], 'r-')
plt.plot([x[2], x[3]],[y[2], y[3]], 'g-')


ax.set_xlim([0, 1])
plt.axis('equal')
ax.set_xlabel('X',size=20)
ax.set_ylabel('Y',size=20)
ax.set_title('Top-Down Projection',size=20)

fig=plt.figure()
ax=fig.add_subplot(111,projection='3d')

z = [Joint1Link0[2], Joint2Link1[2], Joint3Link2[2], Joint4Link3[2]]

ax.plot3D(x[0], y[0], z[0], 'bo')
ax.plot3D(x[1], y[1], z[1], 'ro')
ax.plot3D(x[2], y[2], z[2], 'go')
ax.plot3D(x[3], y[3], z[3], 'go')

x1,y1,z1 = [x[0], x[1]],[y[0], y[1]],[z[0], z[1]]
x2,y2,z2 = [x[1], x[2]],[y[1], y[2]],[z[1], z[2]]
x3,y3,z3 = [x[2], x[3]],[y[2], y[3]],[z[2], z[3]]

ax.plot(x1, y1, z1, color = 'r')
ax.plot([x[1], x[2]],[y[1], y[2]],[z[1], z[2]], 'r-')
ax.plot([x[2], x[3]],[y[2], y[3]],[z[2], z[3]], 'g-')


##XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#Insert Plotting Code Here
ax.text(Joint1Link0[0][0]+0.1, Joint1Link0[1][0], Joint1Link0[2][0],
        'J1L0',None,size=20)

#Insert Plotting Code Here

ax.text(Joint2Link1[0][0]+0.1, Joint2Link1[1][0], Joint2Link1[2][0],
        'J2L1',None,size=20)

#Insert Plotting Code Here

ax.text(Joint3Link2[0][0]+0.1, Joint3Link2[1][0], Joint3Link2[2][0],
        'J3L2',None,size=20)
ax.text(Joint4Link3[0][0]+0.1, Joint4Link3[1][0], Joint4Link3[2][0],
        'J4L3',None,size=20)

##XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

ax.set_xlabel('X',size=20)
ax.set_ylabel('Y',size=20)
ax.set_zlabel('Z',size=20)
ax.view_init(30,-115)



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