Linie zeichnen und Präzisionsangabe

schokolily

Mitglied
Hi Leute!

da ich noch Anfängerin bin und noch ganz große Lücken in AS habe, bitte ich euch um folgende Hilfe.
Der Betrachter der Flash Animation soll aufgefordert werden eine Linie von Punkt A nach Punkt B mit der Maus zu ziehen. Nach dem dies vollbracht ist, soll Flash die Genauigkeit bzw. Präzision errechnen in Prozent. Das heißt wie gerade die Linie gezeichnet worden ist.

Wenn ihr mir nicht helfen könnt oder wollt, da ich ja eigentlich zu viel gefragt habe (ich weiß, bin aber verzweifelt an dieser Aufgabe), dann könnt ihr mir vielleicht ein Tutorial nennen, dass mir gute Hinweise liefert, um diese Aufgabe zu meistern.

Danke schon mal im vorraus.
 
Gut, ich werde mich erbarmen... Spaß!
Einige grundsätzliche Fragen erst einmal für den Anfang:
1) Welches AS3 benutzt du? Ich kenne mich nur mit dem fortgeschrittenen AS3 aus..
2) Welches Flash benutzt du?
3) Für welche Flash Player-Version soll das sein?

Nun zu deinem "Problem":
Was du da machen möchtest ist sehr kompliziert und setzt sehr hohe Kenntnisse in AS voraus, und ist wahrscheinlich selbst für einen Flashentwickler wie Adobe-Evangelist Lee Brimelow eine enorme Herausforderung.
Aber wenn ich weiß welche AS-Version du programmierst, werde ich versuchen dir zu helfen!
 
Also ich würde nach der gezeicheten Linie einfach mittels den Schnittpunkten eine Füllung mit der graphics API anlegen. Wenn die gesamtfüllfläche gegen 0 läuft dann ist das so gut wie eine gerade und je größer die fläche desto unpräziser wurde gezeichnet.

Schau hier.
 
Zuletzt bearbeitet:
Hallo!
Danke erst mal für eure Antwort.
Im Moment benutze ich Flash 8 mit AS 2.0. Habe aber auch Flash CS3 mit AS 3.0.
Könnte auch auf diese umsteigen. Da dies aber eine englische Version ist, muss ich teilweise bisschen suchen und das dauert mir oft zu lange. Aber ich komme da auch klar wenn es sein muss.

Für die Lösung des Problems habe ich mir gedacht, dass Flash ja eventuell die tatsächliche Länge der gezeichneten Linie misst. Dies dann mit der Strecke vergleicht die von Punkt A zu Punkt B direkt geht und dann das Verhältnis in Prozent berechnet.

Ist das einfacher zu Programmieren?

Kann Flash die gezeichnete Linie messen?
 
Die Distanz zwischen zwei Punkten (jeder Punkt hat eine x,y koordinate) kannst du hiermit messen:

PHP:
var dx:Number = x2 – x1;
var dy:Number = y2 – y1;
var dist:Number = Math.sqrt(dx*dx + dy*dy);
 
Ja, das hab ich auch schon raus bekommen.
Aber der Betrachter zeichnet ja mit der Maus keine 100%ige gerade Linie. Das heißt Flash soll die Abweichung zu einer perfekt geraden Linie berechnen (siehe Bsp.).

Da ich nichts dazu gefunden habe, dachte ich dass ich einfach die beiden Längen der Linien vergleiche und dann irgendwie prozentual berechne. da ich aber nicht weiß, wie man in Flash die Länge einer Kurve bzw. eines Graphen berechnet, dachte ich könnte man auch die Schnittfläche per Integral berechnen lassen. Leider habe ich das auch nicht heraus gefunden, wie man das scriptet.

Hoffe mein Beispiel erklärt mein Problem.
 

Anhänge

  • bsp-linie-zeichnen.jpg
    bsp-linie-zeichnen.jpg
    36,4 KB · Aufrufe: 25
Lege ein Timer an mit dem du aktuelle x,y positionen der maus in ein array packst, damit kannst du dann die länge später berechnen...

PHP:
var drawingLine:MovieClip = new MovieClip();
addChild(drawingLine);
drawingLine.graphics.lineStyle(3);
var timer:Timer = new Timer(30);
timer.addEventListener(TimerEvent.TIMER, onTimer);

//x,y punkte in ein Array packen
var line_arr:Array = [];

stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP, MouseUp);

function MouseDown(event:MouseEvent):void {
	//Aufzeichnung beginnen...
	timer.start();
	drawingLine.graphics.moveTo(mouseX, mouseY);
	stage.addEventListener(MouseEvent.MOUSE_MOVE, MouseMove);
}

function MouseMove(event:MouseEvent):void {
	drawingLine.graphics.lineTo(mouseX, mouseY);
}

function MouseUp(event:MouseEvent):void {
	//timer löschen
	timer.removeEventListener(TimerEvent.TIMER, onTimer);
	stage.removeEventListener(MouseEvent.MOUSE_MOVE, MouseMove);
	//Distanz anhand der koordinaten im Array berechnen...
	var dist:Number = 0;
	for (var i:uint; i<line_arr.length-1; i++) {
		var point1:Point = line_arr[i];
		var point2:Point = line_arr[i+1];
		var dx:Number = point2.x - point1.x;
		var dy:Number = point2.y - point1.y;
		dist += Math.sqrt(dx*dx + dy*dy);
	}
	trace("GESAMTDISTANZ: "+dist);
}

function onTimer(e:TimerEvent):void {
	line_arr.push(new Point(mouseX, mouseY));
}
 
Zuletzt bearbeitet:
Super!
Das mit dem Timer kannte ich noch gar nicht.
Jetzt muss ich mich da noch bisschen durch wurschteln damit ich auch alles verstehe, um es dann auch richtig anwenden zu können.
Danke für deine Hilfe. Echt toll!
 

Neue Beiträge

Zurück