Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10-07-2005, 20:57   #1 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
Punkt auf Kugel-Oberfläche

Hallo!
Ich möchte per AS den Effekt erzielen, dass sich eine Kugel dreht, in alle Richtungen.
Dazu möchte ich einige Punkte auf der Oberfläche bewegen lassen.
Das Aufteilen dieser Punkte, dass sie an der Oberfläche sind, hab ich schon geschafft.

Ich habe jetzt x,y,z Koordinaten.
Angezeigt werden natürlich nur x und y (_y=y und _x=x).
Jetzt muss ich diese Punkte um eine Achse drehen, die nur in der XY Ebene liegt.
Das ist der Punkt an dem ich nicht weiter komme.
Ich habe schon Erfahrung in der Erstellung von 3D-Systemen, aber bis jetzt hab ich immer nur in einer der Grund-Achsen gedreht...

Kurz gesagt: Wie drehe ich einen Punkt(X,Y,Z) um eine Achse in der XY-Ebene?

danke! mfg
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 10-07-2005, 21:13   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
x = r sin a cos b
y = r sin a sin b
z = r cos a

wenn du genau in z richtung siehst, dann siehst du z nicht ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 10-07-2005, 22:09   #3 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
sorry, das ist nicht so ganz was ich wollte...
hab jetzt statt zufälliger position einen zufälligen winkel genommen, und deine formel eingebaut...

die punkte sind jetzt irgendwie parabelförmig angeordnet...

ich habs vorher schon gehabt, mit einen code aus einem 3D beispiel
Hier!

das problem war, das der radius immer kleiner geworden ist, also hab ich einfach auf 50 normalisiert

is aber eine unschöne lösung... ich versuchs nochmal mit deiner formel... vl. liegts an was anderem

danke!!
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 10-07-2005, 22:35   #4 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
so...
hab deinen code nochmal in ein neues, schönes file eingebaut...

funktioniert nicht so ganz...
irgend eine idee?

hier noch der code für die die zu faul sind sich das runterzuladen
ActionScript:
  1. r = 50; //Radius
  2. n = 50; //Anzahl
  3. //Punkte erstellen
  4. for(i=0;i<n;i++){
  5. this.attachMovie("punkt","p"+i,i);
  6. p = this["p"+i];
  7. //Zufällige Winkel festlegen
  8. p.ax = Math.random()*2*Math.PI;
  9. p.ay = Math.random()*2*Math.PI;
  10. }
  11. this.onEnterFrame = function(){
  12. ax = _xmouse/200;
  13. ay = _ymouse/200;
  14. for(i=0;i<n;i++){
  15. p = this["p"+i];
  16. //Position berechnen
  17. sinx = Math.sin(p.ax+ax);
  18. siny = Math.sin(p.ay+ay);
  19. cosx = Math.cos(p.ax+ax);
  20. cosy = Math.cos(p.ay+ay);
  21. p.x = r*sinx*cosy;
  22. p.y = r*sinx*siny;
  23. p.z = r*cosx;
  24.  
  25. p._x = p.x;
  26. p._y = p.y;
  27. p._alpha = (p.z>0)? 100:30;
  28. }
  29. }
Angehängte Dateien
Dateityp: zip sphereMap2.zip (5,8 KB, 15x aufgerufen)
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 10-07-2005, 23:30   #5 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
Wow... es funktioniert!
Dadurch dass ich jetzt für euch eine neue .fla angelegt hab, hab ich das ganze etwas sauberer gemacht.

Jetzt hab ich nochmal den Code von meinem 3D-Beispiel verwendet, und jetzt geht er. Weiss nicht warum er vorher nicht so ganz funktioniert hat...
Da sieht man wieder wie wichtig Ordnung ist.

Hier die Formel:
ActionScript:
  1. tz = p.z * cosy - p.x * siny;
  2. p.x = p.z * siny + p.x * cosy;
  3. p.z = p.y * sinx + tz * cosx;
  4. p.y = p.y * cosx - tz * sinx;
So werden aber blöderweise die Ausgangskoordinaten überschrieben.

Ich kann es jetzt anwenden aber verstehen tue ich es noch immer nicht

Ich kann auch nur inkrementell drehen.
Darum auch das "pmx" und "pmy" in meinem neuen Code:
ActionScript:
  1. r = 50; //Radius
  2. n = 150; //Anzahl
  3. focus = 250; //Focus-Abstand für Perspektive
  4. //Punkte erstellen
  5. for(i=0;i<n;i++){
  6. this.attachMovie("punkt","p"+i,i);
  7. p = this["p"+i];
  8.  
  9. //Zufällige Position festlegen
  10. p.x = random(2*r)-r;
  11. p.y = random(2*r)-r;
  12. p.z = random(2*r)-r;
  13. //Normalisieren (Radius bestimmen)
  14. pa = Math.sqrt(p.x*p.x+p.y*p.y+p.z*p.z);
  15. p.x = p.x/pa*r;
  16. p.y = p.y/pa*r;
  17. p.z = p.z/pa*r;
  18. }
  19. //Maus-Position im vorigen Frame
  20. pmx = _parent._xmouse;
  21. pmy = _parent._ymouse;
  22.  
  23. this.onEnterFrame = function(){
  24. //mouse-pm: Um wieviel wurde die Maus bewegt
  25. ay = (_parent._xmouse-pmx)*Math.PI/r/2;
  26. ax = -(_parent._ymouse-pmy)*Math.PI/r/2;
  27. pmx = _parent._xmouse;
  28. pmy = _parent._ymouse;
  29. for(i=0;i<n;i++){
  30. p = this["p"+i];
  31. //Position berechnen
  32. sinx = Math.sin(ax);
  33. siny = Math.sin(ay);
  34. cosx = Math.cos(ax);
  35. cosy = Math.cos(ay);
  36.  
  37. tz = p.z * cosy - p.x * siny;
  38. p.x = p.z * siny + p.x * cosy;
  39. p.z = p.y * sinx + tz * cosx;
  40. p.y = p.y * cosx - tz * sinx;
  41.  
  42. scale = (p.z+focus)/focus;
  43. p._x = p.x*scale;
  44. p._y = p.y*scale;
  45. p._xscale = p._yscale = scale*100;
  46. p._alpha = (p.z>0)? 100:30;
  47. }
  48. }

Hier brauche ich außerdem noch eine zufällige AnfangsPOSITION, nicht den Winkel. Hab ich hier mit zufälligen, normalisierten XYZ-Koordinaten gemacht.
Hab auch noch Perspektive hinzugefügt.

Der Effekt sieht ganz gut aus, und es ist auch nicht sehr Ressourcen-raubend!
Mit 150 Partikeln ist meine CPU nur zur hälfte ausgelastet.

Vl. kann das noch der eine oder andere brauchen!

Jetzt hab ich diesen Thread eigentlich fast alleine geschrieben *g*
aber wenn ich nicht gepostet hätte hätte ich es wahrscheinlich aufgegeben.

Danke hgseib für deinen Ansatz!
mfg
Angehängte Dateien
Dateityp: zip sphereMap2.zip (6,7 KB, 29x aufgerufen)
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 10-07-2005, 23:49   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
"..und deine formel eingebaut.."
das ist nicht MEINE formel. sondern DIE formel, zum berechnen einer kugelkoordinate ;-)
z.b.
ActionScript:
  1. r = 50;
  2. n = 50;
  3. speed = 2;
  4. for (i=0; i<n; i++) {
  5.     p = this.attachMovie("punkt", "p"+i, i);
  6.     p.ax = Math.random()*2*Math.PI;
  7.     p.ay = Math.random()*2*Math.PI;
  8.     p.rs = r*Math.sin(p.ax);
  9.     p._y = r*Math.cos(p.ax);
  10. }
  11. this.onEnterFrame = function() {
  12.     w = Math.atan2(_ymouse, _xmouse);
  13.     this._rotation += w*speed;
  14.     for (i=0; i<n; i++) {
  15.         p = this["p"+i];
  16.         p._x = p.rs*Math.cos(p.ay+w);
  17.         p._z = p.rs*Math.sin(p.ay+w);
  18.         p._alpha = (p._z>0) ? 100 : 30;
  19.     }
  20. };
-----
da komm ich wohl zu spät ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (10-07-2005 um 23:51 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 11-07-2005, 00:15   #7 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
Das sieht schon besser aus!
Aber ist auch nicht das was ich eigentlich wollte.
und das Ganze mit _rotation ist auch etwas schwammig.
du rotierst nur um eine Achse, bzw. um Y und Z (Z eben per _rotation)

ich bleibe bei der Variante die ich leider selbst nicht verstehe, sieht "räumlicher" aus.
Und ich kann sie dafür verwenden, wofür ich das eigentlich gebraucht habe:
schau mal im Anhang, sieht geil aus!
Angehängte Dateien
Dateityp: zip interactingBalls.zip (1,7 KB, 24x aufgerufen)
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 03:06 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele