Der markierte Punkt (Kommentar sagt "markierter Punkt") besteht darin, die vorhandenen Punkte in einem 3D-Plot um einen Punkt zu drehen. Grundsätzlich verschiebe ich alle Punkte um 60 Grad. Aus irgendeinem Grund überlappe ich beim Verschieben der Punkte zwei Punkte. Ich habe versucht, meine if-Anweisung zu ändern und habe mit den Indizes herumgespielt, war aber nicht erfolgreich. Der einzige Grund, warum ich die gesamte Funktion einbezogen habe, ist, dass Sie das Problem, das ich habe, grafisch darstellen können. Hier ist es; lassen Sie mich wissen, wenn Sie Fragen haben:Plotpunkte überlappen beim Drehen von Punkten in der xy-Ebene
def transform_3d_trig(a,b,c):
q=2*math.pi/(360)
d=c*q
a2 = a+b
n = 12
sin=math.sin
cos=math.cos
sqrt=math.sqrt
x = []
y = []
z = []
for i in range(n):
if i <= 5:
x.append(a*np.cos(q*(60*(i-1))))
y.append(a*np.sin(q*(60*(i-1))))
z.append(0)
else:
x.append(a2*np.cos(q*(60*(i-1))))
y.append(a2*np.sin(q*(60*(i-1))))
z.append(0)
x_new = x #new lists
y_new = y
z_new = z
for i in range(n):
y_new[i] = y[i]*cos(d)
z_new[i] = y_new[i]*np.tan(d)
# plot points at this stage (before rotation); no overlapping points
fig = plt.figure(figsize=(12,12))
ax3 = fig.add_subplot(211, projection='3d')
bond2 = [x_new[4],x_new[10],y_new[4],y_new[10],z_new[4],z_new[10]]
ax3.plot(bond2[:2],bond2[2:4],bond2[4:6], color='r')
ax3.scatter(x_new, y_new, z_new)
ax3.set_xlabel('\nX')
ax3.set_ylabel('\nY')
ax3.set_zlabel('\nZ')
x_dummy = x_new #dummy variables to not screw up list
y_dummy = y_new
for i in range(n): #marked spot
if (i == 5 or i == 11):
x_new[i] = x_dummy[i-5]
y_new[i] = y_dummy[i-5]
else:
x_new[i] = x_dummy[i+1]
y_new[i] = y_dummy[i+1]
print(x_new[i], y_new[i]) #to track what point are overlapping
# plot points at this stage (after rotation); overlapping points
ax3 = fig.add_subplot(212, projection='3d')
bond2 = [x_new[4],x_new[10],y_new[4],y_new[10],z_new[4],z_new[10]]
ax3.plot(bond2[:2],bond2[2:4],bond2[4:6], color='r')
ax3.scatter(x_new, y_new, z_new)
ax3.set_xlabel('\nX')
ax3.set_ylabel('\nY')
ax3.set_zlabel('\nZ')
plt.show()
return x, y, z, x_new, y_new, z_new
Sorry, mein Kommentar in verwirrend gemacht. Die x_new, y_new und z_new sind Listen, keine Arrays. Mein schlechtes wieder. Ich werde meinen ursprünglichen Beitrag bearbeiten. –
Genauso. Duplizierst die Referenzen, kopierst den Inhalt nicht. – Julien
es gibt mir einen Fehler "'Liste' Objekt hat kein Attribut 'Kopieren'" –