Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-10-2004, 21:52   #1 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Lightbulb [MX] [Stuff] Rekonstruktion von Baryzentren, Berechnung der Gewichtsverteilung

Hallo,

ich musste für eine Simulation die Gewichtsverteilung einer Masse im Ursprung auf mehrere Stützpunkte berechnen.
Dazu habe ich das folgende Script geschrieben, vielleicht kann es mal jemand gebrauchen.

PHP-Code:
// Punktklasse
// Speichert Koordinaten und
// Gewichtung eines Punktes
Point = function(xy)
{
    
this.x;
    
this.y;
    
    
this.0;
}

Point.prototype.setWeight = function(w)
{
    
this.w;
};

// Baryzentrumklasse
// Speichert Koordinaten,
// Gewichtung und
// Teilpunkreferenzen eines Baryzentrums
Barycentre = function(p1p2)
{
    
this.= (p1.p2.x) / 2;
    
this.= (p1.p2.y) / 2;
    
    
this.0;
    
    
this.p1 p1;
    
this.p2 p2;
}

// legt das Gewicht eines Baryzentrums fest
// und weist den Teilpunkten / Teilbaryzentren ihr Gewicht zu
Barycentre.prototype.setWeight = function(w)
{
    
this.w;
    
    
this.p1.setWeight(2);
    
this.p2.setWeight(2);
};

// Diese Funktion Reduziert die Menge aller Punkte
// auf 3 Punkte oder Baryzentren
function reduce(points)
{
    var 
l;
    var 
i;
    var 
j;
    var 
z;
    
    var 
steps = new Array();
    
    var 
step;
    
    var 
source points;
    
    var 
pos;
    
    var 
depth 0;
    
    while(
source.length 3)
    {
        
source.length;
        
Math.floor(2);
        
l;
        
i;
        
        
step = (steps[depth] = new Array());
        
        
depth++;
        
        while((
3) && (z))
        {
            
pos j;
            
            
step.push(new Barycentre(source[pos], source[pos 1]));
            
            
i--;
            
i;
        }
        
        if((
2) == 1)
        {
            
step.push(source[1]);
        }
        else if(
== 4)
        {
            
step.push(source[2]);
            
step.push(source[1]);
        }
        
        
source step;
    }
    
    return 
source;
}

// diese Funktion berechnet die Gewichtsverteilung
// auf 3 Punkte oder Baryzentren
// Diese sorgen dann für die weitere Verteilung
// auf ihre Teilpunkte / Teilbaryzentren
function setWeights(pointsw)
{
    var 
points[0];
    var 
points[1];
    var 
points[2];
    
    var 
divisor B.C.A.C.B.A.B.C.A.C.B.A.y;
    
    
divisor /= w;
    
    
C.setWeight((B.A.B.A.y) / divisor);
    
B.setWeight((A.C.A.C.y) / divisor);
    
A.setWeight((B.C.B.C.x) / divisor);
}

// diese Funktion ermittelt die Koordinaten eines
// Baryzentrums einer Menge von Punkten oder Baryzentren
// unter verwendung ihrer Gewichte
function getBarycentre(points)
{
    var 
0;
    var 
0;
    var 
0;
    var 
p;
    
    var 
points.length;
    
    while(--
> -1)
    {
        
points[i];
        
        
+= p.w;
        
+= p.p.x;
        
+= p.p.y;
    }
    
    return {
xwywww};
}

// in diesem Array werden die Ursprungspunkte gespeichert
var points = new Array();

var 
20;
var 
50;

var 
angle 0;

// Punkte werden eingefüllt, ihr Schwerpunkt muss im Ursprung liegen
for(var i=0ni++)
{
    
angle Math.PI i;
    
    
points.push(new Point(Math.cos(angle), Math.sin(angle)));
}

// hier werden die 3 durch Reduktion
// erhaltenen Punkte oder Baryzentren gespeichert
new_points reduce(points);

// Das Gesammtgewicht wird festgelegt und evtl.
// durch Rekursion auf die Punkte und Baryzentren verteilt
setWeights(new_points4);

// Zur Kontrolle berechne ich das Baryzentrum der
// nun gewichteten Punkte
bz getBarycentre(new_points);

// Ausgabe des Baryzentrums, 
// muss 0 | 0 und das oben angegebene erhalten
trace(Math.round(bz.x) + " | " Math.round(bz.y) + " (Gesammtgewicht: " bz.")"); 
EDIT: noch das Lämpchen davor gemacht

Geändert von Janoscharlipp (29-10-2004 um 21:54 Uhr)
Janoscharlipp 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 19:15 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele