Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
04.12.12, 16:25
|
#1
|
Anfänger
Registriert seit: Jun 2012
Beiträge: 20
Bedankt: 0
|
Bogen zwischen zwei Punkten dynamisch zeichnen
Hallo,
ich habe zwei Punkte A(x,y) und B(x,y), diese immer unterscheidlich sein können.
Ich möchte einen Bogen zwischen den Punkten zeichnen.
Programmiersprache: JAVA
Klar hier gibt es die methode drawArc() von canvas, aber ich komme mit den Winkeln nicht so ganz klar.
Leider ist Mathe schon etwas her bei mir und komme hier nicht weiter.
Es soll dan zwischen zwei Punkten maximal zwei Bögen wie auf dem beigefügten Bild gezeichnet werden.
Kann mir jemand bei diesen Problem helfen?
Danke
Ranjo85
|
|
|
04.12.12, 17:08
|
#2
|
Echter Freak
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.856
Bedankt: 1.701
|
Aus mathematischer Sicht würde ich sagen, dass du entweder einen dritten Punkt brauchst oder die höhe zwischen dem Kreisbogen als Senkrechte zwischen A und B und dem Kreismittelpunkt.
EDIT: Über die Höhe würde sich dann auch die "Biegung" der Bogen "regulieren".
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
|
|
|
04.12.12, 17:28
|
#3
|
Anfänger
Registriert seit: Jun 2012
Beiträge: 20
Bedankt: 0
|
Hallo spartan-b292,
leider hilft mir dies nicht weiter.
Wie gesagt gibt es schon die passende Methode drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) nur weiss ich leider nicht wie ich die Parameter korrekt setze.
|
|
|
04.12.12, 17:39
|
#4
|
Echter Freak
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.856
Bedankt: 1.701
|
Ich kenne mich mit Java nicht aus, aber das Problem bleibt mMn das gleiche.
Du kannst alle Parameter für drawArc berechnen du bräuchtests nur einen weiteren bekannten Parameter um die Berechnung durchzuführen.
Man könnte eventuell den Wert für einen weiteren Punkt (z.B. die höhe) mit einer schleife solange ausprobieren bis der Kreis passend gezeichnet wird aber das dürfte ziemlich uneffektiv sein.
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
|
|
|
04.12.12, 19:46
|
#5
|
Erfahrenes Mitglied
Registriert seit: Jul 2010
Beiträge: 489
Bedankt: 236
|
Ist es egal wie die Bögen aussehen?
Hauptsache es ist ein Bogen da?
|
|
|
04.12.12, 20:20
|
#6
|
Anfänger
Registriert seit: Jun 2012
Beiträge: 20
Bedankt: 0
|
@Thelvan: Die Bögen sollen in etwa die Höhe haben wie auf dem bild!
|
|
|
04.12.12, 20:58
|
#7
|
Mitglied
Registriert seit: Jul 2012
Beiträge: 382
Bedankt: 72
|
Kreisbögen? Wo ist der Mittelpunkt?
|
|
|
04.12.12, 21:36
|
#8
|
Anfänger
Registriert seit: Nov 2010
Beiträge: 2
Bedankt: 0
|
Hi Ranjo85.
Der Funktionsaufruf ist wie folgt zu parametisieren.
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
x,y sind die Koordinaten deines Kreismittelpunktes
width und height stellen die Größe des Kreises dar.
startAngle ist der Winkel, ab dem angefangen wird zu zeichnen (warscheinlich in Grad gerechnet. Ergo 0-360)
arcAngle stellt die breite des Winkels dar, der gezeichnet wird (also willst du einen 90° Winkel zeichnen, kommt da schonmal 90 rein)
Wenn du beispielsweise auf dem Mittelpunkt des Bildschirms einen Halbkreis malen willst, und die Bildschirmhöhe und breite in den Variablen screenwidth und screenheight gespeichert hast, läuft das so ab.
drawArc(screenwidth*0.5 , screenheight*0.5 , 5, 5, 0, 180)
Damit bekommst du einen Halbkreis, der einen Radius von 5 Pixeln hat.
Da du ja deinen Kreis in der Höhe stauchen willst, nimmst du halt bei dem Parameter height weniger als bei width. Das Verhältnis musst du selbst ausknobeln.
In deinem konkreten Fall müsstest du warscheinlich die Funktion so aufrufen
drawArc(XwertvonA + (XwertvonB-XwertvonA)*0.5 , YwertvonA oder YwertvonB , 10, 2, 0, 360)
bzw. die Werte width und height deinen Wünschen anpassen.
Das bedeutet, du hast die X und Y Koordinaten deiner beiden Punkte irgendwann einmal eingelesen. Aus diesen Werten kannst du dir dann den Kreismittelpunkt errechnen. Ich hab XwertvonA + deltaX/2 genommen (wobei ja deltaX die Differenz der beiden x Werte ist).
Die Y-Koordinate ist in deinem Beispiel offenbar bei beiden Punkten die selbe, deswegen ist es egal welche du von beiden nimmst.
Jetzt hast du das zwar links und rechts an deinen Punkten abgerundet, aber ich schätze, damit kannst du leben.
LG Morty
|
|
|
04.12.12, 21:40
|
#9
|
Echter Freak
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.856
Bedankt: 1.701
|
Laut diesem Thread :
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
werden die Parameter so berechnet:
Zitat:
int r = (int)Math.sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0));
int x = x0-r;
int y = y0-r;
int width = 2*r;
int height = 2*r;
int startAngle = (int) (180/Math.PI*atan2(y1-y0, x1-x0));
int endAngle = (int) (180/Math.PI*atan2(y2-y0, x2-x0));
graphics.drawArc(x, y, width, height, startAngle, endAngle);
|
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 Uhr.
().
|