myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Ungelesen 04.12.12, 16:25   #1
Ranjo85
Anfänger
 
Registriert seit: Jun 2012
Beiträge: 20
Bedankt: 0
Ranjo85 ist noch neu hier! | 0 Respekt Punkte
Standard 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
Ranjo85 ist offline   Mit Zitat antworten
Ungelesen 04.12.12, 17:08   #2
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.866
Bedankt: 1.700
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

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"
spartan-b292 ist offline   Mit Zitat antworten
Ungelesen 04.12.12, 17:28   #3
Ranjo85
Anfänger
 
Registriert seit: Jun 2012
Beiträge: 20
Bedankt: 0
Ranjo85 ist noch neu hier! | 0 Respekt Punkte
Standard

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.
Ranjo85 ist offline   Mit Zitat antworten
Ungelesen 04.12.12, 17:39   #4
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.866
Bedankt: 1.700
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

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"
spartan-b292 ist offline   Mit Zitat antworten
Ungelesen 04.12.12, 19:46   #5
Thelvan
Erfahrenes Mitglied
 
Registriert seit: Jul 2010
Beiträge: 493
Bedankt: 236
Thelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt Punkte
Standard

Ist es egal wie die Bögen aussehen?

Hauptsache es ist ein Bogen da?
Thelvan ist offline   Mit Zitat antworten
Ungelesen 04.12.12, 20:20   #6
Ranjo85
Anfänger
 
Registriert seit: Jun 2012
Beiträge: 20
Bedankt: 0
Ranjo85 ist noch neu hier! | 0 Respekt Punkte
Standard

@Thelvan: Die Bögen sollen in etwa die Höhe haben wie auf dem bild!
Ranjo85 ist offline   Mit Zitat antworten
Ungelesen 04.12.12, 20:58   #7
fryx
Mitglied
 
Benutzerbild von fryx
 
Registriert seit: Jul 2012
Beiträge: 382
Bedankt: 72
fryx gewöhnt sich langsam dran | 84 Respekt Punkte
Standard

Kreisbögen? Wo ist der Mittelpunkt?
__________________
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] | [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] | [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] |[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
fryx ist offline   Mit Zitat antworten
Ungelesen 04.12.12, 21:36   #8
IVIorty
Anfänger
 
Registriert seit: Nov 2010
Beiträge: 2
Bedankt: 0
IVIorty ist noch neu hier! | 0 Respekt Punkte
Standard

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
IVIorty ist offline   Mit Zitat antworten
Ungelesen 04.12.12, 21:40   #9
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.866
Bedankt: 1.700
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

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"
spartan-b292 ist offline   Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

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

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 Uhr.


Sitemap

().