| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User 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 ;) |
| | |
| | #2 (permalink) |
| Neuer User 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
__________________ 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 ;) |
| | |
| | #3 (permalink) |
| Techniker 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) |
| | |
| | #4 (permalink) |
| Neuer User 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 ;) |
| | |
| | #5 (permalink) |
| Neuer User 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 ;) |
| | |
| | #6 (permalink) |
| Techniker 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 |
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Sep 2004 Ort: Spain/Ibiza
Beiträge: 942
|
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 ;) |
| | |
| | #8 (permalink) |
| Neuer User Registriert seit: Sep 2004 Ort: Spain/Ibiza
Beiträge: 942
|
da bin ich wieder ![]() ActionScript:
__________________ 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) |
| | |
| | #9 (permalink) |
| [+] 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. |
| | |
| | #10 (permalink) |
| Techniker 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 |
| | |
| | #11 (permalink) |
| Neuer User 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 ;) |
| | |
| | #12 (permalink) |
| [+] 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. |
| | |
| | #13 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.322
|
eine erweiterung, die immer geht - in den grenzen des möglichen.
__________________ 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) |
| | |
| | #14 (permalink) |
| [+] 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. Geändert von André Michelle (27-01-2006 um 08:55 Uhr) |
| | |
| | #15 (permalink) |
| Techniker 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) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |