| |
|
| Maxscript: Variabel in Loop deklarieren
Hi, habe ein kleines Prob ich will in MaxScript die Fibonacci Sequenz haben. Dazu müsste ich pro loop eine neue Variable deklarieren. Soll am Ende also so Aussehen: f(1)=1 f(2)=2 f(5)=5 usw. Aber wenn ich z.B. im loop schreibe f(i)=i+1 oder ähnliches. Bekomm ich ne Fehlermeldung. Ich hoffe jemand von euch lann mir Helfen. Danke im Vorraus. |
| |
| | #2 |
| AW: Maxscript: Variabel in Loop deklarieren
Für ne Fibonacci Folge nimmst du am besten ein array. Das sähe dann etwa so aus. (Keine Garantie, dass es funktioniert. Ich mach das gerade Freistil...) Code: global arr = #() --Deklaration eines leeren Arrays arr[1] = 1 --die ersten beiden Einträge der Fibonacci Folge arr[2] = 1 for i = 3 to 1000 do ( arr[i] = arr[(i-1)] + arr[(i-2)] --Errechnen und Speichern der Einträge ) |
| |
| | #3 |
| AW: Maxscript: Variabel in Loop deklarieren
Vielen Dank genau das brauchte ich. So nun habe ich Quadrate mit den Zahlen der Fibonacci-Folge. Allerdings sind alle noch um den Ursprung gordnet. Sollten aber wie auf diesem Bild geordnet werden: Hatt jemand von euch ne Idee bin schon den ganzen Tag nun am Rätseln. Ich habe heute mit MaxScript angefangen also habt Nachsicht mit mir. Soweit bin ich: Edit: habe ne Lösung vollständiger Code nun unten. |
| |
| | #4 |
| AW: Maxscript: Variabel in Loop deklarieren
ICh denke ich habe nun ne Möglichkeit gefunden. Allerdings kann ich nicht prüfen ob sie funktioniert da Max nen Fehler ausspuckt... |
| |
| | #5 |
| AW: Maxscript: Variabel in Loop deklarieren
In der letzten zeile steht Code: if i = w-1 then exit Code: if i == w-1 then exit Für ne abfrage brauchst du zwei "=". Wenn du nur eins nimmst, ist das ne Zuweisung. (d.h. i wird auf 14 gesetzt und "if 14" macht keinen Sinn. Deshalb auch die Fehlermeldung. If braucht einen Booleschen Wert, also "if true" oder "if false".) Ich schau mir jetzt mal den Rest des Codes an. |
| |
| | #6 |
| AW: Maxscript: Variabel in Loop deklarieren
Kannst du mir sagen mit welchem Befehl ich Max "sage" es soll die schleife hier stoppen und von vorn beginnen?
|
| |
| | #7 |
| AW: Maxscript: Variabel in Loop deklarieren
Wie man eine Loop neustartet weiß ich leider nicht. Ich bin mir nicht mal sicher, ob das in MXS überhaupt funtioniert. In C++ würd ich break, return, continue oder goto benutzen, aber die gibts in MXS nicht, bzw haben eine andere Funktion. In der Zwischenzeit hab ich mir mal dein Script angesehen, und ich muss sagen, es ist doch etwas konfus. (Selbst für nen Anfänger Aber ich glaube, ich weiß was du machen willst und habe einen etwas kürzeren Code geschrieben, der das bewerkstelligt. Wenn du Fragen zu einem bestimmten Abschnitt hast, meld dich. Ansonsten kann ich dir empfehlen, die "How to..." Scripte in der MaxScript Reference oder Bobos Lessons zu machen. Da lernt man echt viel. Und immer schön weiter scripten... Code: global arr = #()
global w = 15
global pos_Alt =[0,1,0] --alte Position
arr[1] = 1 --die ersten 2 Fibonacci Zahlen
arr[2] = 1
Rectangle length: 1 width: 1 pos: [0,0,0] --die ersten 2 Quadrate
Rectangle length: 1 width: 1 pos: [0,1,0]
for i = 3 to 100 do
(
arr[i] = arr[i-1] + arr[i-2] --Berechnen der Fibonacci Zahlen
if i < w then
(
Rectangle length: arr[i] width: arr[i] isSelected: true --Erstellen der Qudrate
a = arr[i]/2 as float --halbe Kantenlänge des aktuellen Quadrates
b = arr[i-1]/2 as float --halbe Kantenlänge des letzten Quadrates
c = arr[i-2]/2 as float --halbe Kantenlänge des vorletzten Quadrates
case of --berechnen des Offsets zum letzten Quadrat
(
(mod i 4 == 3): pos_Neu = [a+b,-1*c,0]
(mod i 4 == 0): pos_Neu = [-1*c,-1*(a+b),0]
(mod i 4 == 1): pos_Neu = [-1*(a+b),c,0]
(mod i 4 == 2): pos_Neu = [c,a+b,0]
)
$.pos = pos_Alt + pos_Neu --Position des aktuellen Qudrates
pos_Alt = $.pos --Speichern der aktuellen Position
)
)
|
| |
| | #8 |
| AW: Maxscript: Variabel in Loop deklarieren Code: case of --berechnen des Offsets zum letzten
(
(mod i 4 == 3): pos_Neu = [a+b,-1*c,0]
(mod i 4 == 0): pos_Neu = [-1*c,-1*(a+b),0]
(mod i 4 == 1): pos_Neu = [-1*(a+b),c,0]
(mod i 4 == 2): pos_Neu = [c,a+b,0]
)
$.pos = pos_Alt + pos_Neu --Position des aktuellen Qudrates
pos_Alt = $.pos --Speichern der aktuellen Position
)
Edit: also Case of heißt praktisch er prüft welche der Bedingungen zutrifft ist und führt dann das dahinterstehende aus. Aber was bedeutet: Code: (mod i 4 == 3): |
| |
| | #9 |
| AW: Maxscript: Variabel in Loop deklarieren
Genau. Case prüft die (in diesem Fall) 4 Bedingungen der Reihe nach von oben nach unten und die erste, die zutrifft, wird ausgeführt. D.h. wenn mehrere zutreffen, wird trotzdem nur die erste angewandt. Code: mod i 4 Daher werden das 3., 7. und 11. Rechteck nach rechts-unten verschoben. Das 4., 8. und 12. Rechteck wird nach unten-links verschoben, da 4 mod 4, 8 mod 4 und 12 mod 4 jeweils 0 ergibt. Solche Modulo Operationen bieten sich immer an, wenn man in einer Loop zyklisch etwas machen will, zB in jedem 5ten Durchlauf, da mod immer wieder die selben Ergebnisse durchläuft. (also bei mod 4: 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, .....) |
| |
| | #10 |
| AW: Maxscript: Variabel in Loop deklarieren
Vielen Dank das war wirklich sehr hilfreich und vorallem hab ich einiges dabei gelernt.
|
| |
| Themen-Tools | Thema durchsuchen |
| |
| LinkBacks zu diesem Thema: http://pixelplausch.de/autodesk-3ds-max/2658-maxscript-variabel-loop-deklarieren.html | ||||
| Erstellt von | für | Art | Datum | Hits |
| CGTalk - fibonacci / golden ratio | dieses Thema | Refback | 28.01.2009 00:52 | 4 |
©2007-2012, PIXELPLAUSCH - Powered by vBulletin® Version 3.8.2 Copyright ©2000 - 2012, Jelsoft Enterprises Ltd. span>, Search Engine Friendly URLs by vBSEO 3.3.0