Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-12-2002, 19:24   #1 (permalink)
netTrek
 
Benutzerbild von netTrek
 
Registriert seit: Jul 2001
Ort: 46282 Dorsten
Beiträge: 2.972
Post Kreis und Ellipsen Funktion

Wir haben das zwar schon 1000 mal hier gehabt aber ich hab hier einen "anderen" Ansatz für Ellipsen- und Kreis-Zeichnenfunktionen.

Wer's braucht ...

ActionScript:
  1. // Kreis und Ellipsen Funktion
  2. // netTrek - Saban Ünlü
  3. MovieClip.prototype.elipse = function(x, y, rx, ry, sgm) {
  4.     // anzahl der Segmete
  5.     sgm = sgm == undefined ? 8 : sgm;
  6.     // Segmetwinkel in Grad
  7.     sgmAngle = 360/sgm;
  8.     // Faktor für RAD
  9.     Math.rad = Math.PI/180;
  10.     // Der Winkel an dem man den Kotrollradius berechnet ist immer zwichen Start und Endpunkt
  11.     // der Bezierkurve folglich der halbe segmentwinkel
  12.     var cRangle = (sgmAngle*Math.rad)/2;
  13.     // radius (Kotrollkreis) |BETRAG| der Kontrollinie (länge) in X Richtung
  14.     var cRx = rx/Math.cos(cRangle);
  15.     var cRy = ry/Math.cos(cRangle);
  16.     // startPunkt rechts außen
  17.     this.moveTo(x+rx, y);
  18.     for (var angle = sgmAngle; angle<=360; angle += sgmAngle) {
  19.         trace(angle);
  20.         // aktueller Winkel mit dem gearbeitet wird:
  21.         var myAngle = angle*Math.rad;
  22.         // controllPkt Koordinaten
  23.         var cX = x+Math.cos(myAngle-cRangle)*cRx;
  24.         var cY = y+Math.sin(myAngle-cRangle)*cRy;
  25.         // Endpunkt
  26.         var pX = x+Math.cos(myAngle)*rx;
  27.         var pY = y+Math.sin(myAngle)*ry;
  28.         this.curveTo(cX, cY, pX, pY);
  29.     }
  30. };
  31. MovieClip.prototype.kreis = function(x, y, r, sgm) {
  32.     sgm = sgm == undefined ? 8 : sgm;
  33.     this.elipse(x, y, r, r, sgm);
  34. };
  35. // ANWENDUNG -BSP--------------------------------------------------------------------------------
  36. this.onMouseDown = function() {
  37.     this.down = true;
  38.     this.startX = this._xmouse;
  39.     this.startY = this._ymouse;
  40.     this.counter = this.counter == undefined ? 1 : this.counter += 1;
  41.     this.createEmptyMovieClip("my"+this.counter+"_mc", this.counter);
  42. };
  43. this.onMouseUp = function() {
  44.     this.down = false;
  45.     this["my"+this.counter+"_mc"].size.removeMovieClip();
  46. };
  47. this.onMouseMove = function() {
  48.     if (down) {
  49.         this["my"+this.counter+"_mc"].clear();
  50.         this["my"+this.counter+"_mc"].lineStyle(1, 0xFF0000, 100);
  51.         var centerX = (this.startX+this._xmouse)/2;
  52.         var centerY = (this.startY+this._ymouse)/2;
  53.         var delatX = this._xmouse-centerX;
  54.         var delatY = this._ymouse-centerY;
  55.         this["my"+this.counter+"_mc"].elipse(centerX, centerY, delatX, delatY);
  56.         this["my"+this.counter+"_mc"].createEmptyMovieClip("size", 1);
  57.         this["my"+this.counter+"_mc"].size.lineStyle(1, 0, 10);
  58.         this["my"+this.counter+"_mc"].size.moveTo(this.startX, this.startY);
  59.         this["my"+this.counter+"_mc"].size.lineTo(this._xmouse, this.startY);
  60.         this["my"+this.counter+"_mc"].size.lineTo(this._xmouse, this._ymouse);
  61.         this["my"+this.counter+"_mc"].size.lineTo(this.startX, this._ymouse);
  62.         this["my"+this.counter+"_mc"].size.lineTo(this.startX, this.startY);
  63.     }
  64. };
  65. // ANWENDUNG -ENDE-------------------------------------------------------------------------------
  66.  

SABAN

PS: Bin für Verbesserungsvorschläge dankbar
__________________
Saban Ünlü

netTrek GmbH & Co. KG
Softwareentwicklung, Design & Konzeption
www.netTrek.de
netTrek ist offline   Mit Zitat antworten
Alt 29-12-2002, 19:36   #2 (permalink)
hOk
Neuer User
 
Benutzerbild von hOk
 
Registriert seit: Jun 2001
Ort: berlin
Beiträge: 829
Sieht fein aus, krasse Mathe,
aber warum schreibst du dir
das hier: this["my"+this.counter+"_mc"]
nicht in eine Variable?
mfg, Holger
__________________
gobogo
hOk ist offline   Mit Zitat antworten
Alt 29-12-2002, 19:37   #3 (permalink)
Flashbattle.de
 
Benutzerbild von Sven G.
 
Registriert seit: Jul 2001
Ort: Bochum / NRW
Beiträge: 347
Hi Saban......

Wow, da bin ich echt sprachlos! Ist Dir echt gelungen!

Gruss & Schönen Rutsch ins neue Jahr
__________________
Viele Grüße

Sven Gasser @ BountyKiller.de
Flashbattle.deGründer
webmaster@flashbattle.de
Flashbattle.de ActionScript Referenz
DELTA Agentur - Agentur für Werbung & Kommunikation

(Kein Support per eMail, PN oder ICQ)
Sven G. ist offline   Mit Zitat antworten
Alt 29-12-2002, 19:41   #4 (permalink)
netTrek
 
Benutzerbild von netTrek
 
Registriert seit: Jul 2001
Ort: 46282 Dorsten
Beiträge: 2.972
@-= hOk =-
Du das Anwendungsbeispiel war "nur" ein Test und ich hab da einfach nicht drauf geachtet...

Eigentlich habe ich das BSP auch nur gemacht um zu schauen ob die Ellipsen (Kreise) die gezeichnet werden auch in das "mathematisch" Richtige Viereck passen.

@Sven G.
THX
__________________
Saban Ünlü

netTrek GmbH & Co. KG
Softwareentwicklung, Design & Konzeption
www.netTrek.de
netTrek ist offline   Mit Zitat antworten
Alt 29-12-2002, 20:14   #5 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Hi netTrek

sehr schoene Kreise macht das.

Ich würde vielleicht direkt mit rad rechnen,
dann sparst du dir das Umrechnen in der Schleife.

Sinnvoll wäre es wohl auch, das x,y ganz aus der
Berechnung raus zu ziehen und stattdessen den mc
entsprechend positionieren.

Bei der Kreisfunktion ist das sgm == undefined ?
doppelt gemoppelt, denn es wird ja in der Ellipsen-
funktion sowieso gemacht.

Fröhlichen Rutsch,
mfg r.
bokel ist offline   Mit Zitat antworten
Alt 29-12-2002, 21:28   #6 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
Thumbs up

Auf jeden Fall auch von mir einen Daumen nach oben!

Sebastian
sebastian ist offline   Mit Zitat antworten
Alt 29-12-2002, 22:14   #7 (permalink)
netTrek
 
Benutzerbild von netTrek
 
Registriert seit: Jul 2001
Ort: 46282 Dorsten
Beiträge: 2.972
@bokel
das mit dem Rad ist ne gute idee werde ich noch machen!
Mit sgm hast du natürlich recht...

Die x und y Position halte ich jedoch für wichtig falls man Kreise und andere Formen realisieren will.

@Sebastian W.
THX

SABAN
__________________
Saban Ünlü

netTrek GmbH & Co. KG
Softwareentwicklung, Design & Konzeption
www.netTrek.de
netTrek ist offline   Mit Zitat antworten
Alt 29-12-2002, 22:54   #8 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
wg. x,y

Die Grafik ändert sich dadurch nicht,
aber so wie du es jetzt machst,
haben alle Kreise, d.h. deren Mcs
die Position 0,0.

mfg r.

Geändert von bokel (29-12-2002 um 23:03 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 30-12-2002, 07:29   #9 (permalink)
[Matthias K.] - Moderator
 
Benutzerbild von Madokan
 
Registriert seit: Jun 2001
Ort: Berlin/Germany - and the hole World !
Beiträge: 9.971
Kurz vor Jahreswechsel noch feine Skripte. Wer behauptet da noch das Mathe kein Spass macht.

Liebe Grüsse
Matze K.
Madokan ist offline   Mit Zitat antworten
Alt 30-12-2002, 11:10   #10 (permalink)
netTrek
 
Benutzerbild von netTrek
 
Registriert seit: Jul 2001
Ort: 46282 Dorsten
Beiträge: 2.972
@bokel
Das Anwendungsbsp. ist nur ein dummy... mir geht es nur um die Methoden und ich muss damit rechnen, dass diese in einem anderen Zusammenhang benutzt werden und dann könnte x,y wichtig sein.

@Madokan
THX

SABAN
__________________
Saban Ünlü

netTrek GmbH & Co. KG
Softwareentwicklung, Design & Konzeption
www.netTrek.de
netTrek ist offline   Mit Zitat antworten
Alt 30-12-2002, 11:47   #11 (permalink)
netTrek
 
Benutzerbild von netTrek
 
Registriert seit: Jul 2001
Ort: 46282 Dorsten
Beiträge: 2.972
Hier noch mal in Rad und einem "einfacheren" Anwendungsbsp.
ActionScript:
  1. // Kreis und Ellipsen Funktion
  2. // netTrek - Saban Ünlü
  3. MovieClip.prototype.ellipse = function(x, y, rx, ry, sgm) {
  4.         sgm = sgm == undefined ? 8 : sgm;
  5.         var periode = 2*Math.PI
  6.         var sgmAngle = periode/sgm;
  7.         var cRangle = sgmAngle/2;
  8.         var cRx = rx/Math.cos(cRangle);
  9.         var cRy = ry/Math.cos(cRangle);
  10.         this.moveTo(x+rx, y);
  11.         for (var angle = sgmAngle; angle<=periode; angle += sgmAngle) {
  12.                 var cX = x+Math.cos(angle-cRangle)*cRx;
  13.                 var cY = y+Math.sin(angle-cRangle)*cRy;
  14.                 var pX = x+Math.cos(angle)*rx;
  15.                 var pY = y+Math.sin(angle)*ry;
  16.                 this.curveTo(cX, cY, pX, pY);
  17.         }
  18. };
  19. MovieClip.prototype.kreis = function(x, y, r, sgm) {
  20.         this.ellipse(x, y, r, r, sgm);
  21. };
  22. // Anwenungsbeispiel
  23. this.lineStyle(1);
  24. // erst eine Ellipse
  25. this.beginFill(0xFF0000,100);
  26.     this.ellipse (50, 200, 100, 50);
  27. this.endFill();
  28. // dann eine Kreis
  29. this.beginFill(0x0000FF,100);
  30.     this.kreis (275, 200, 100);
  31. this.endFill();
  32. // dann wieder eine Ellipse
  33. this.beginFill(0x00FF00,100);
  34.     this.ellipse (450, 200, 50, 100);
  35. this.endFill();

SABAN
__________________
Saban Ünlü

netTrek GmbH & Co. KG
Softwareentwicklung, Design & Konzeption
www.netTrek.de
netTrek ist offline   Mit Zitat antworten
Alt 30-12-2002, 12:16   #12 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
klasse, Saban!

sehr sinnvoll und schön klar und einfach aufgebaut.

Florian
__________________
www.planet-xaml.net
flory ist offline   Mit Zitat antworten
Alt 31-12-2002, 07:00   #13 (permalink)
[Matthias K.] - Moderator
 
Benutzerbild von Madokan
 
Registriert seit: Jun 2001
Ort: Berlin/Germany - and the hole World !
Beiträge: 9.971
Yup und es zeigt mal wieder - wie viele tolle Ideen hier im Forum gepostet werden, die auch praktisch einzusetzen sind.

Liebe Grüsse
Matze K.
Madokan 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 15:31 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele