Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 20-08-2007, 13:56   #1 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.649
Gleichmäßige Verteilung auf einer Kugel

Kennt jemand die Formel für eine gleichmäßige Verteilung von Punkten auf der Oberfläche einer Kugel?
Gleichmäßige Verteilung auf einem Kreis wäre ja:

PHP-Code:
for (var i:Number 0i<numPointsi++) {
winkel i*((Math.PI*2)/numPoints);
pointX MittelpunktX+Math.sin(winkel)*radius;
pointY MittelpunktY+Math.cos(winkel)*radius;

Nur bringt es mir leider nichts, das ganze einfach auf einer z-achse nochmal zu wiederholen.
__________________
we will stop enhancing the truth in 3, 2, ...
SpecOps-12 ist offline   Mit Zitat antworten
Alt 20-08-2007, 18:57   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
http://de.wikipedia.org/wiki/Platonischer_Körper
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 21-08-2007, 14:28   #3 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.649
Woa. Ist das kompliziert.
Hätt ich nicht gedacht.
Ne dynamische Verteilung beliebig vieler Punkte kann man wohl völlig den Hasen geben.

Ich denk, ich werd es dann lieber über Breitenkreise machen und einfach ne Liste anlegen, bei wievielen Objekten welche Verteilung erfolgt.
__________________
we will stop enhancing the truth in 3, 2, ...
SpecOps-12 ist offline   Mit Zitat antworten
Alt 21-08-2007, 16:04   #4 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.649
Hab mal was gebastelt.
Die Bewegung basiert auf ner Vorlage von Keith Peters (Um keine fremden Lorbeeren abzustauben)
Es ist abzusehen, dass das nicht besonders hübsch wird so.
Kennt jemand ein Tutorial zur berechnung von Radius+Winkel1+Winkel2 für nen Ikasaeder oder nen abgeflachten Ikasaeder?
Ich hab dazu nur ne Diplomarbeit gefunden, die etwas hoch für mich ist.

Das Script hier ist
PHP-Code:
var numPoints:Number 80;
var 
fl:Number 1000;
var 
vpX:Number Stage.width/2;
var 
vpY:Number Stage.height/2;
var 
home:MovieClip this;
init();



function 
init() {

    var 
angle1:Number 0;
    var 
angle2:Number 0;
    var 
distance:Number = (360/(Math.sqrt(numPoints)))*Math.PI/180;// Distanz zwischen Punkten auf aufgefächerter 360x360°-Fläche
    
var steps:Number Math.round(Math.sqrt(numPoints));// Schritte Breitengrad
    
var c:Number 0;// Zähler für Schritte pro Breitengrad;
    
var R:Number 100;// Radius



    
for (var i:Number 1i<=2i++) { // Anlegen von Nord und Südpol
        
var point:MovieClip attachMovie("spoint""points"+i9997+i);

        if (
== 1) {
            var 
cos1:Number Math.cos(0);
            var 
sin1:Number Math.sin(0);

            var 
cos2:Number Math.cos(0);
            var 
sin2:Number Math.sin(0);
            
point.textfeld.text "N";
        } else {
            var 
cos1:Number Math.cos(180*(Math.PI/180));
            var 
sin1:Number Math.sin(180*(Math.PI/180));

            var 
cos2:Number Math.cos(0);
            var 
sin2:Number Math.sin(0);
            
point.textfeld.text "S";
            
point._rotation 180;
        }

        
//trace(i+") angle1 = "+angle1+", angle2 = "+angle2);

        
var x1:Number R*sin1*cos2;
        var 
y1:Number R*sin1*sin2;
        var 
z1:Number R*cos1;

        
//trace("1) x1 = "+x1+",y1 = "+y1+",z1 = "+z1);

        
point.x1;
        
point.y1;
        
point.z1;

        
//trace(point.z);


    
}

    
//trace(home.points2.x1);

    
for (var i:Number 0i<numPointsi++) {
        var 
point:MovieClip attachMovie("point""point"+ii);


        var 
cos1:Number Math.cos(angle1);
        var 
sin1:Number Math.sin(angle1);

        var 
cos2:Number Math.cos(angle2);
        var 
sin2:Number Math.sin(angle2);

        
//trace(i+") angle1 = "+angle1+", angle2 = "+angle2);

        
if (c>=steps) {
            
0;
            
angle2 += distance;
            
angle1 0;
        }
        
angle1 += distance;

        var 
x1:Number R*sin1*cos2;
        var 
y1:Number R*sin1*sin2;
        var 
z1:Number R*cos1;

        
//trace("1) x1 = "+x1+",y1 = "+y1+",z1 = "+z1);

        
point.x1;
        
point.y1;
        
point.z1;

        
//trace(point.z);

        
c++;
        if (
angle2<50 && angle2>10) {
            
point.textfeld.text Math.round(angle2);//+"° - "+Math.round(angle2)+"°";
        
} else {
            
point.textfeld.text "";//+"° - "+Math.round(angle2)+"°";
        
}
    }
}
0;
function 
onEnterFrame():Void {
    
c++;

    var 
angleY:Number = (_xmouse-vpX)*.001;
    var 
cosY:Number Math.cos(angleY);
    var 
sinY:Number Math.sin(angleY);

    var 
angleX:Number = (_ymouse-vpY)*.001;
    var 
cosX:Number Math.cos(angleX);
    var 
sinX:Number Math.sin(angleX);

    for (var 
i:Number 1i<=2i++) {
        var 
point:MovieClip home["points"+i];

        
//trace(point);
        //trace(point.x+" "+point.y+" "+point.z);

        
var x1:Number point.x*cosY-point.z*sinY;
        var 
z1:Number point.z*cosY+point.x*sinY;

        var 
y1:Number point.y*cosX-z1*sinX;
        var 
z2:Number z1*cosX+point.y*sinX;



        
point.x1;
        
point.y1;
        
point.z2;



        if (
point.z<=-fl) {
            
point._visible false;
        } else {
            
point._visible true;
            var 
scale:Number fl/(fl+point.z);
            
point._xscale point._yscale=scale*100;
            
point._x vpX+point.x*scale;
            
point._y vpY+point.y*scale;
            
point.swapDepths(-point.z);
        }
    }

    for (var 
i:Number 0i<numPointsi++) {
        var 
point:MovieClip home["point"+i];


        var 
x1:Number point.x*cosY-point.z*sinY;
        var 
z1:Number point.z*cosY+point.x*sinY;

        var 
y1:Number point.y*cosX-z1*sinX;
        var 
z2:Number z1*cosX+point.y*sinX;

        
point.x1;
        
point.y1;
        
point.z2;

        if (
point.z<=-fl) {
            
point._visible false;
        } else {
            
point._visible true;
            var 
scale:Number fl/(fl+point.z);
            
point._xscale point._yscale=scale*100;
            
point._x vpX+point.x*scale;
            
point._y vpY+point.y*scale;
            
point.swapDepths(-point.z);
        }
    }
    
clear();
    
lineStyle(1,0,100);
    
moveTo(point0._x,point0._y);
    for (var 
i:Number 1i<numPointsi++) {
    var 
point:MovieClip this["point"+i];
    
lineTo(point._x,point._y);
    }
    
lineTo(point0._x,point0._y);*/
    
    
lineStyle(1,0xff0000,100);
    
moveTo(points1._x,points1._y);
    
lineTo(points2._x,points2._y);



__________________
we will stop enhancing the truth in 3, 2, ...
SpecOps-12 ist offline   Mit Zitat antworten
Alt 21-08-2007, 16:51   #5 (permalink)
undefined
 
Benutzerbild von mildesign
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 1.839
schickes Teil und tolles Spielzeug ;o)
www.hdm-stuttgart.de/~fm023/FF/space.html

nix für Plasmas ;o)
__________________
mfg Frank
mildesign ist offline   Mit Zitat antworten
Alt 21-08-2007, 19:48   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
probier mal das da hin zu bekommen:

zuerst einen Tetraeder. damit hats du 4 eckpunkte und 4 dreiecke.

vom kugelmittelpunkt durch die mitte jedes dreiecks ein neuer kugelpunkt. so erhälst du aus jeder dreiecksfläche drei neue flächen.
also jetzt 4+4=8 eckpunkte und 4*3=12 dreiecke.

und wieder
vom kugelmittelpunkt durch die mitte jedes dreiecks ein neuer kugelpunkt.
ergibt 8+12=24 eckpunkte und 12*3=36 dreiecke.

usw.
richtig programmiert kann man das rekursiv ausführen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 22-08-2007, 11:09   #7 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.649
Hi,

zweidimensional bekäm ich das hin, aber ich muss ja zuerst mal die jeweiligen Ecken des Tetraeders als zwei Winkel ausdrücken. Wie mach ich denn das?
__________________
we will stop enhancing the truth in 3, 2, ...
SpecOps-12 ist offline   Mit Zitat antworten
Alt 22-08-2007, 16:09   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
Zitat:
Zitat von Weidler Beitrag anzeigen
zweidimensional bekäm ich das hin
na prima, lang doch:
für x nimmst du die vorderansicht (x+y richtung). für y die draufsicht (x+z richtung)

ansonsten musst du dich halt mal ein bisschen mit mathe beschäftigen - etwas mehr eigeninitiative, mehr forscherdrang und ergeiz bitte. weil, das forum kann keine schulung ersetzen.
oder: erkenne die grenzen deiner möglichkeiten ;-)

http://de.wikipedia.org/wiki/Kugelkoordinaten
x=r sin Wxy cos Wxz
y=r sin Wxy sin Wxz
z=r cos Wxy
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (22-08-2007 um 16:17 Uhr)
hgseib 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 16:59 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele