Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 20-01-2006, 11:44   #1 (permalink)
Neuer User
 
Benutzerbild von Xeef
 
Registriert seit: Sep 2004
Ort: Spain/Ibiza
Beiträge: 942
curveTo wie wird das berechnet ?

wie wird curveTo intern berechnet ?


brauch sowas wie X=Math.sin(......

wen mir jemand sagen kan wie ich diese curve in 2 curven teile were auch super

moveTo(0,0)
curveTo(50,100,300,400)


moveTo(0,0)
curveTo(x1,y1,x2,y2)
curveTo(x3,y3,x4,y5)

soll gleich aussehen wie das andere hall 2 curven anstat einer !
__________________
Languages : (in the order of knowledge/preference)
Read: Flash AS, PHP, JS, Html, DHtml, Basic, C++, DOS, 3DMaxScript, English, Deutsch, Magyar, XML, Pascal, VB, Spanish
Write: Flash AS, Basic, PHP, JS, DHtml, Html, ..., C++, ...., ..., English, ..., ..., ..., ...., Deutsch, ..., Magyar

wen du mein deutsch nicht magst whele eine andere sparache von den obrigen ;)
Xeef ist offline   Mit Zitat antworten
Alt 20-01-2006, 11:59   #2 (permalink)
Neuer User
 
Benutzerbild von Xeef
 
Registriert seit: Sep 2004
Ort: Spain/Ibiza
Beiträge: 942
als erstes musste ich irgend wie den roten punkt berechnen
solte der mitelpinkt der curvenstrecke sein

und dan 2 curven erzeugen die mit der ersten deckungs gleich sind

sihe bild
Angehängte Grafiken
Dateityp: jpg untitled.JPG (3,9 KB, 58x aufgerufen)
__________________
Languages : (in the order of knowledge/preference)
Read: Flash AS, PHP, JS, Html, DHtml, Basic, C++, DOS, 3DMaxScript, English, Deutsch, Magyar, XML, Pascal, VB, Spanish
Write: Flash AS, Basic, PHP, JS, DHtml, Html, ..., C++, ...., ..., English, ..., ..., ..., ...., Deutsch, ..., Magyar

wen du mein deutsch nicht magst whele eine andere sparache von den obrigen ;)
Xeef ist offline   Mit Zitat antworten
Alt 20-01-2006, 14:29   #3 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
a) "..wie wird curveTo intern berechnet ?.."
b) "..wie ich diese curve in 2 curven teile were auch super.."

http://www.seibsprogrammladen.de/fra...on/Mathe/flash
das buch aufschlagen und
a) bézier-kurven berechnen
b) de casteljau algorithmus

http://www.seibsprogrammladen.de/fra...ispiele/flash7
-> Zeichnen
- Bézierkurve n.Grades, BSpline n.Ordnung und Kubischer Spline (3)

Code:
// curveTo teilen
//
var p1 = {x:100, y:100};
var p2 = {x:400, y:100};
var p3 = {x:400, y:400};
//
this.lineStyle(7, 0, 50);
this.moveTo(p1.x, p1.y);
this.curveTo(p2.x, p2.y, p3.x, p3.y);
//
// trennpunkt bei x%
var t = .3;
//
var p12 = {x:p1.x+(p2.x-p1.x)*t, y:p1.y+(p2.y-p1.y)*t};
var p23 = {x:p2.x+(p3.x-p2.x)*t, y:p2.y+(p3.y-p2.y)*t};
var p123 = {x:p12.x+(p23.x-p12.x)*t, y:p12.y+(p23.y-p12.y)*t};
//
this.lineStyle(1, 0x00FF00);
this.moveTo(p1.x, p1.y);
this.curveTo(p12.x, p12.y, p123.x, p123.y);
this.lineStyle(1, 0xFF0000);
this.curveTo(p23.x, p23.y, p3.x, p3.y);
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (20-01-2006 um 15:52 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 20-01-2006, 16:10   #4 (permalink)
Neuer User
 
Benutzerbild von Xeef
 
Registriert seit: Sep 2004
Ort: Spain/Ibiza
Beiträge: 942
Hmmm

intresante lekture muss mich mall durchweltzen (vielen dank)

aber soweit ich das auf dem ersten blik sehe geht es uberwigend um
"Cubic Bezier" flash benutz aber "Quadratic Bezier"

heist ich habe keine 2 controlpunkte sondern nur einz
__________________
Languages : (in the order of knowledge/preference)
Read: Flash AS, PHP, JS, Html, DHtml, Basic, C++, DOS, 3DMaxScript, English, Deutsch, Magyar, XML, Pascal, VB, Spanish
Write: Flash AS, Basic, PHP, JS, DHtml, Html, ..., C++, ...., ..., English, ..., ..., ..., ...., Deutsch, ..., Magyar

wen du mein deutsch nicht magst whele eine andere sparache von den obrigen ;)
Xeef ist offline   Mit Zitat antworten
Alt 20-01-2006, 16:17   #5 (permalink)
Neuer User
 
Benutzerbild von Xeef
 
Registriert seit: Sep 2004
Ort: Spain/Ibiza
Beiträge: 942
Haha hat da doch jemand in seiner post rum editiert


das siht gut aus, sehr gut sogar !


vielen lieben dank !

(grosses verbeugen)
__________________
Languages : (in the order of knowledge/preference)
Read: Flash AS, PHP, JS, Html, DHtml, Basic, C++, DOS, 3DMaxScript, English, Deutsch, Magyar, XML, Pascal, VB, Spanish
Write: Flash AS, Basic, PHP, JS, DHtml, Html, ..., C++, ...., ..., English, ..., ..., ..., ...., Deutsch, ..., Magyar

wen du mein deutsch nicht magst whele eine andere sparache von den obrigen ;)
Xeef ist offline   Mit Zitat antworten
Alt 20-01-2006, 16:22   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
"..heist ich habe keine 2 controlpunkte sondern nur einz.."
ja:
lineTo(startpunkt)
curveTo(controlpunkt, endpunkt)


ist die selbe technik, mit mehr oder weniger beiwerten:
"Cubic Bezier" == (a+b)^3 flash benutz aber "Quadratic Bezier" == (a+b)^2

dito de casteljau:
am script kannst du sehen, das bei Quadratic Bezier's eine konstruktionslinie (p12 .. p23 -> mitte=p123) langt.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 21-01-2006, 13:08   #7 (permalink)
Neuer User
 
Benutzerbild von Xeef
 
Registriert seit: Sep 2004
Ort: Spain/Ibiza
Beiträge: 942
Thumbs up

super vielen dank noch mall
hut ab vor dein mathe (het ich damals nur besser aufgepast )
__________________
Languages : (in the order of knowledge/preference)
Read: Flash AS, PHP, JS, Html, DHtml, Basic, C++, DOS, 3DMaxScript, English, Deutsch, Magyar, XML, Pascal, VB, Spanish
Write: Flash AS, Basic, PHP, JS, DHtml, Html, ..., C++, ...., ..., English, ..., ..., ..., ...., Deutsch, ..., Magyar

wen du mein deutsch nicht magst whele eine andere sparache von den obrigen ;)
Xeef ist offline   Mit Zitat antworten
Alt 23-01-2006, 14:21   #8 (permalink)
Neuer User
 
Benutzerbild von Xeef
 
Registriert seit: Sep 2004
Ort: Spain/Ibiza
Beiträge: 942
da bin ich wieder

ActionScript:
  1. // curveTo teilen
  2. //
  3. var p1 = {x:100, y:100};
  4. var p2 = {x:200, y:100};
  5. var p3 = {x:400, y:400};
  6. //
  7. this.lineStyle(7, 0, 50);
  8. this.moveTo(p1.x, p1.y);
  9. this.curveTo(p2.x, p2.y, p3.x, p3.y);
  10. //
  11. ///////////////////////////////////
  12. //
  13. // trennpunkt bei x%
  14. //
  15. // trennpunkt ist nich bei % der strecke sondern bei % "der schrite ?"
  16. // je grosser die steigung umso mehr macht es aus
  17. // weiss du irgend ein weg um wirklich die mitte zu trefen
  18. // bezihungs weise das 2 schrite die gleiche strecke bedeuten ?
  19. // ich zeichne curven die mit dieser formel (noch mall danke)
  20. // schritweise gezeichnet werden
  21. // so ist alerdings die zeichnungs geschwindigkeit unkonstant
  22. // mall schneler mall langsamer je nach steigung
  23. //
  24. // die formel ist ein bischen uber mein konen
  25. // ich muste irgend wie die steigung mit berucksichtigen
  26. // alerdings hab ich keine ahnung wie :(
  27. //
  28. // heist mit eine schleife "t" erhohen alerdings muss "t" um ein wariirenden wert erhoht werden
  29. // wie krieg ich das ?
  30. //////////////////////////////////
  31. //
  32. var t = .5;
  33. //
  34. var p12 = {x:p1.x+(p2.x-p1.x)*t, y:p1.y+(p2.y-p1.y)*t};
  35. var p23 = {x:p2.x+(p3.x-p2.x)*t, y:p2.y+(p3.y-p2.y)*t};
  36. var p123 = {x:p12.x+(p23.x-p12.x)*t, y:p12.y+(p23.y-p12.y)*t};
  37. //
  38. this.lineStyle(1, 0x00FF00);
  39. this.moveTo(p1.x, p1.y);
  40. this.curveTo(p12.x, p12.y, p123.x, p123.y);
  41. this.lineStyle(1, 0xFF0000);
  42. this.curveTo(p23.x, p23.y, p3.x, p3.y);
__________________
Languages : (in the order of knowledge/preference)
Read: Flash AS, PHP, JS, Html, DHtml, Basic, C++, DOS, 3DMaxScript, English, Deutsch, Magyar, XML, Pascal, VB, Spanish
Write: Flash AS, Basic, PHP, JS, DHtml, Html, ..., C++, ...., ..., English, ..., ..., ..., ...., Deutsch, ..., Magyar

wen du mein deutsch nicht magst whele eine andere sparache von den obrigen ;)

Geändert von Xeef (23-01-2006 um 14:23 Uhr)
Xeef ist offline   Mit Zitat antworten
Alt 23-01-2006, 16:18   #9 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Das ist leider nicht einfach zu lösen und nur über Näherungsverfahren in den Griff zu bekommen.

Ansatz:
http://archives.math.utk.edu/visual....h.1/index.html

Parametrisierte Gleichung einer quadratischen Bezierkurve
x(t):=(1-t)^2*x0+2*t*(1-t)*x1+t^2*x2;
y(t):=(1-t)^2*y0+2*t*(1-t)*y1+t^2*y2;

Ableitung:
x(t)'=2*t*(x0 - 2*x1 + x2) - 2*x0 + 2*x1;
y(t)'=2*t*(y0 - 2*y1 + y2) - 2*y0 + 2*y1;

Das heisst, die Kurvenlänge eines Stückes[t0,t1] ist relativ einfach zu lösen, aber von einer Kurvenlänge ab t0 auf t1 zu kommen habe ich bis heute nicht lösen können.

Es sei denn, du approximierst.
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 23-01-2006, 19:49   #10 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
bézier mit konstanter geschwindigkeit zeichnen:

die zwischenpunkte (in ein array) vorberechnen
und dann mit linien verbinden.
bei genügent zwischenpunkten ist das "rund" genug.
die länge der linien ist berechenbar und linien trennen geht auch einfach.

zeichengeschwindigkeit ist eine länge.

jetzt halt soviele linenstücke zeichen, bis die zeichenlänge erreicht ist
gegebenefalls eine linie nur teilweise zeichnen (trennen)
der rest dieser linie zählt beim nächsten step mit.


macht ein bisschen arbeit, aber wer schön sein will muss leiden ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 23-01-2006, 22:05   #11 (permalink)
Neuer User
 
Benutzerbild von Xeef
 
Registriert seit: Sep 2004
Ort: Spain/Ibiza
Beiträge: 942
Hmmmm

eigentlich hab ich immer gedacht ich bin in mathe nicht schlecht aber bei dem formeln versteh ich nur bahnhof



die methode von hgsieb scheint mir verwirklich bar (mit mienem kentnis stand der math )

muss mall ausprobieren und sehen wie es rauskomt


vielen dank an euch mall sehen was ich hinkriege und wan der nexte unlosbare problem auftauch
__________________
Languages : (in the order of knowledge/preference)
Read: Flash AS, PHP, JS, Html, DHtml, Basic, C++, DOS, 3DMaxScript, English, Deutsch, Magyar, XML, Pascal, VB, Spanish
Write: Flash AS, Basic, PHP, JS, DHtml, Html, ..., C++, ...., ..., English, ..., ..., ..., ...., Deutsch, ..., Magyar

wen du mein deutsch nicht magst whele eine andere sparache von den obrigen ;)
Xeef ist offline   Mit Zitat antworten
Alt 25-01-2006, 19:52   #12 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Es gibt eine sehr schnelle, aber auch nur approximierte Lösung allerdings ohne Loop-Approximation.

bezier at constant speed

Die Idee ist, die Velocity mit Hilfe der ersten Ableitung am BezierPunkt P(t) zu berechnen. Von diesem Punkt kann man einen 2. t-Wert mit dem Abstand X berechnen, wenn man X / sqrt( V(t) ) nimmt. Da aber die Velocity bei jedem t anders ist, funktioniert das nur in der Nähe. Aber ich finde, dass es für die meisten Anwendungen reichen wird. Ansonsten wäre eine zwei oder dreifache Unterteilung des Abstand sehr dicht am Ergebnis.

Im SWF zeige ich pro errechneten Punkt den Abstand zum vorherigen im Textfeld an. Wenn die Kurve nicht zu arg gebogen ist, dann liegen die Werte zwischen +/- 1. Um so mehr Punkte (Slider), desto genauer wird das Ergebnis.
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 27-01-2006, 02:04   #13 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
eine erweiterung, die immer geht - in den grenzen des möglichen.
Angehängte Dateien
Dateityp: zip bezier_constant_speed.zip (5,7 KB, 54x aufgerufen)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (27-01-2006 um 02:22 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 27-01-2006, 08:52   #14 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Sehr gut. Wie berechnest du den Scheitelpunkt der Kurve ?

Wobei gerade am Scheitelpunkt das nicht funktioniert. Das kann man vielleicht noch optimieren.
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com

Geändert von André Michelle (27-01-2006 um 08:55 Uhr)
André Michelle ist offline   Mit Zitat antworten
Alt 27-01-2006, 19:04   #15 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
"..Wie berechnest du den Scheitelpunkt der Kurve ?.."
steht doch im script:
var n=1, sx=x0-2*x1+x2, sy=y0-2*y1+y2;
//
// scheitel
var b = (sx*(x2-x1)+sy*(y2-y1))/(sx*sx+sy*sy);
var s = b<0 ? 0 : b>1 ? 1 : b;
var a = 1-s;
var mx = s*s*x0+2*a*s*x1+a*a*x2;
var my = s*s*y0+2*a*s*y1+a*a*y2;
war eine formel im internet, die aber definitiv nicht gestimmt hat. hab rumprobiert bis es passend ausgesehen hat ;-) wenn der scheitelpunkt der punkt mit der grössten steigung ist, dann soll's der sein.


"..Wobei gerade am Scheitelpunkt das nicht funktioniert.."
steht auch im script:
// draw bézier mit (fast) konstanter geschwindigkeit
// (im scheitelpunkt gibt es einen längenausgleich)
dann müsste man zuerst die länge der kurve ermitteln um eine ganzzahlige teilung zu erhalten. sonst gibts immer einen rest.
vom scheitelpunkt zu den enden hin teilen und die reststücke dort zu haben geht nicht, weil dabei das mit dem riessen abstand entsteht. was ja der auslöser war, warum ich von beiden enden zum scheitelpunkt hin unterteile.

und gebastelt:
// scheitelpunkt erhalten
// const/3 ist willkürlich gewählt.
// ziel: doppelpunkte am scheitelpunkt zu unterbinden

der scheitelpunkt selbst muss nicht unbedingt dabei sein
p21.push({x:mx, y:my});
aber dann werden besonders spitze kurven gekappt.

da der scheitelpunkt nicht in die teilung passt pope ich noch die zwei nachbarpunkte, wenn sie zu nahe liegen.
p01.pop(); und p21.pop();
die daraus resultierenden 2 unexakten verbindungslinien sind der besste kompromis.
kann aber jeder handhaben wie er will ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (27-01-2006 um 19:10 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 03:19 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele