ich bin neu hier im Forum.
Hausaufgaben liegen Dekaden zurück, aber Lust auf Neues ist noch vorhanden.
Bin vor 2 Wochen auf Python gestoßen und habe so gut wie keine Programmiererfahrung.
Bitte also um Nachsicht.
Knabbere jetzt seit Tagen an einem Problem und komm nicht weiter.
Bevor ich also aufgebe, wende ich mich an Euch
Mir geht es dabei nicht um eine fertige Lösung, sondern um Hinweise, wie ich mein Ziel erreichen kann. Das Ganze ist nicht zeitkritisch. Der Lernerfolg steht im Vordergrund.
Nun aber genug der Vorrede und zur Beschreibung der Herausforderung:
Ich möchte in FreeCAD (freies 3D-Programm) einen BSpline erzeugen.
Das Script dafür sieht vereinfacht wie folgt aus:
Code: Alles auswählen
P1 = (0,1,0) # Px = (x,y,z)
P2 = (2,1,3)
P3 = (4,2,1)
Draft.makeBSpline ([P1,P2,P3])
Da Splines aber nicht nur über 3 Punkte verfügen, möchte ich die Koordinaten einlesen und den Spline automatisch erzeugen lassen. Dazu kommt, dass ich die einzelnen Koordinatenwerte beeinflussen möchte.
x und y werden je nach Wunsch (Eingabe eines Wertes) mit dem gleichen Wert multipliziert und z wird ein Wert (Eingabe eines Wertes) zugewiesen.
Bedeutet für P2 z.B.: x*150 und y*150 und z=20 , also P2 = (300,150,20)
Die so erzeugten Splines ergeben am Ende das Profilegerüst einer Finne.
Die Punkt habe ich z.Z. in einer Datei: datafile.dat:
1,0.00060,0
0.95,0.00707,0
0.9,0.01259,0
0.85,0.01713,0
0.8,0.02099,0
0.75,0.02400,0
0.7,0.02635,0
0.65,0.02797,0
0.6,0.02917,0
0.55,0.02981,0
…
Da das jetzt viel Text war, schreibe ich mein Begehren noch einmal in Kurzform:
Einlesen von Stützpunkten (x,y,z)
Beeinflussen der Stützpunkte (x und y durch Multiplikation ; z mit Addition)
Einfügen der Punkte in den „Aufruf“ Darft.makeBSpline ([P1, P2, Px,....])
Das Einlesen habe ich wie folgt gelöst:
Code: Alles auswählen
mydata = [line.rstrip() for line in open('datafile.dat','r')]
print (mydata) #Stellt die gesamte Liste dar
i=0
for line in mydata:
x = mydata [(i)]
i = i+1
print (x)
y = mydata[1]
print (y)
Aber wie kann ich die x, y und z-Werte der Einzelpunkt beeinflussen und Sie dann in das Draft.makeBSpline bringen.
Ich bin für jeden Input dankbar.
Gruß
Willibald