Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-02-2004, 23:27   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Beiträge: 10
Unhappy Schnittpunkt an Kreis berechnen

hoi zusammen,

folgendes Problem:

ich möchte vom mittelpunkt eines dynamisch erzeugten Kreises aus (verwende drawApi von Saban Ünlü) zur aktuellen mausposition eine linie (mit lineTo) zeichnen. das ist an sich nicht das problem. die linie soll aber erst ab dem Kreis gezeichnet werden und ich kriegs verdammt nochmal nicht gebacken, den schnittpunkt auf dem kreis zu ermitteln, da ich mit den winkelberechnungen in as so meine probleme habe.

wär schön, wenn ihr mir helfen könntet --> .fla ist angefügt
Angehängte Dateien
Dateityp: rar schnittpunkt_berechnen.rar (10,4 KB, 5x aufgerufen)
puulworx ist offline   Mit Zitat antworten
Alt 15-02-2004, 23:49   #2 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.347
was benutztn du fürne flash version? konnte deine datei nicht öffnen!

cya, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 16-02-2004, 00:01   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Beiträge: 10
Zitat:
Geschrieben von salazar
was benutztn du fürne flash version? konnte deine datei nicht öffnen!

cya, sal
hy salazar,

habs mit mx erstellt, vielleicht ist beim packen was schief gelaufen - lad die files nochmal hoch

bis dann
Angehängte Dateien
Dateityp: rar schnittpunkt_berechnen.rar (8,7 KB, 10x aufgerufen)
puulworx ist offline   Mit Zitat antworten
Alt 16-02-2004, 00:03   #4 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.347
besser
aber schon nen bissal spät.. morgen vielleicht mal rein schauen.

n8, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 16-02-2004, 00:04   #5 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Beiträge: 10
kein problem,

ich penn auch gleich weg

bis morschen?
puulworx ist offline   Mit Zitat antworten
Alt 16-02-2004, 02:14   #6 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Ort: Köln
Beiträge: 106
Ich habe mal eine Funktionslibrary für zweidimensionale Vektorrechnung geschrieben. Die gibt's als FLA auf dem HTML-Opener meiner Site unter www.planneun.de.

Daraus hab ich hier ne Funktion verwendet. Dann kann das z.B. so aussehen: www.khm.de/~leif/klimbim/kreisgeo.swf.


Das Listing:

ActionScript:
  1. /*** PREFS ***/
  2.  
  3. radius  = 100;
  4. circleSteps = 64;
  5. circleCenterX = 300;
  6. circleCenterY = 300;
  7.  
  8.  
  9. /*** FUNCTIONS ***/
  10.  
  11. absscale = function (vm2dv27, vm2dn30) {
  12.     // Skaliert einen Vector auf eine Ziellänge
  13.     var vm2dn31 = 1/Math.sqrt(vm2dv27.x*vm2dv27.x+vm2dv27.y*vm2dv27.y);
  14.     var vm2dv27 = new vector(vm2dv27.x*vm2dn31, vm2dv27.y*vm2dn31);
  15.     vm2dv27.x*=vm2dn30;
  16.     vm2dv27.y*=vm2dn30;
  17.     return vm2dv27;
  18. }
  19.  
  20. drawCircle = function () {
  21.     // zeichnet einen Kreis aus geraden Linien
  22.     createEmptyMovieClip("myCircle", 1);
  23.     myCircle._x = circleCenterX;
  24.     myCircle._y = circleCenterY;
  25.     myCircle.lineStyle(1, 0x000000, 100);
  26.     myCircle.moveTo (0, radius);
  27.     var stepwidth = (2*Math.PI)/circleSteps;
  28.     var i=2*Math.PI; while (i>0) {
  29.         i-=stepwidth;
  30.         myCircle.lineTo(Math.sin(i)*radius, Math.cos(i)*radius);
  31.     }
  32. }
  33.  
  34. drawLine = function (x0,y0,x1,y1) {
  35.     // zeichnet einfach eine Linie
  36.     createEmptyMovieClip("myLine", 2);
  37.     myLine.lineStyle(1, 0x0000FF, 100);
  38.     myLine.moveTo(x0,y0);
  39.     myLine.lineTo(x1,y1);
  40. }
  41.  
  42.  
  43. mouseDraw =  {};
  44. mouseDraw.onMouseMove = function () {
  45.     // eigentliche Programmfunktionalität
  46.  
  47.     // Vector von circleCenter zu MousePosition bilden
  48.     myVec = new vector(circleCenterX-_xmouse, circleCenterY-_ymouse);
  49.    
  50.     // diesen vector auf radiuslänge skalieren
  51.     myScaledVec =  absscale(myVec, radius);
  52.    
  53.     // .. und als Offset für's Linienzeichnen benutzen
  54.     myX = circleCenterX-myScaledVec.x;
  55.     myY = circleCenterY-myScaledVec.y;
  56.    
  57.     // ... um schliesslich die Linie zu zeichnen
  58.     drawLine (_xmouse, _ymouse, myX, myY)
  59. }
  60.  
  61.  
  62. /*** PROGRAM ***/
  63.  
  64. // datentyp vector basteln
  65. _global.vector = function (x,y) {
  66.     this.x=x;
  67.     this.y=y;
  68. }
  69.  
  70. // Kreis zeichnen
  71. drawCircle();
  72.  
  73. // Mousefunktionalität aktivieren
  74. Mouse.addListener(mouseDraw);
  75.  
  76. stop();
__________________
http://www.rumbke.de
leif ist offline   Mit Zitat antworten
Alt 16-02-2004, 10:21   #7 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Beiträge: 10
SÜÜÜPERB!

hey das ging aber fix - vielen dank - genau so hat ichs mir vorgestellt! danke, danke ....

wenn ich nochmal nerven darf:

wie kann man einschränken, dass:

1. die linie nur außerhalb des kreises gezeichnet wird?

2. die linie nur bis zu einer bestimmten länge (z.B. 50px)gezeichnet werden darf?


bis denne
puulworx ist offline   Mit Zitat antworten
Alt 16-02-2004, 12:55   #8 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Ort: Köln
Beiträge: 106
1) Da kannst Du z.B. einen Check des Vektorbetrags für Deinen skalierten Vektor myScaledVec durchführen, indem Du die Funktion vabs() aus der Library verwendest.

ActionScript:
  1. // ermittelt die Länge eines Vektors
  2. vabs = function (vm2dv5) {
  3.     return Math.sqrt(vm2dv5.x*vm2dv5.x+vm2dv5.y*vm2dv5.y);
  4. }

Dann die Linie nur noch zeichnen, wenn der Betrag des Vektors grösser als der Kreisradius ist.

2) Da kannst Du wieder absscale() verwenden. Erst per vabs() checken, ob Dein Ergebnisvector (ohne Offset) >maxLineLen ist und wenn ja, dann auf Deine maxLineLen skalieren.
__________________
http://www.rumbke.de
leif ist offline   Mit Zitat antworten
Alt 16-02-2004, 13:30   #9 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Beiträge: 10
Wink

MILLE GRAZIE,

ich probiers mal aus - hätt' ich doch mal besser in mathe aufgepasst - jetzt weiß man wofür man's brauch ....

cu
puulworx ist offline   Mit Zitat antworten
Alt 16-02-2004, 14:31   #10 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.347
da waren se schneller als ich
cya, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar 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 04:21 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele