Endposition DrawArc

KarlPichler

Mitglied
Hallo!
Hab mal ne frage in die runde.
Gibt es eine fertige Funktionen die mir die Endkoordinaten beim DrawArc() ausgibt.

ein Beispiel: ich mache eine Kurve mit 150° und möchte die Endposition der Kurve.

gibts sowas schon oder muss ich mir die selber schreiben?
Danke
 
S

SE

Ich glaube das es ein Framework für sowas gibt ... Java selbst bietet in keiner seine Math-Klassen so etwas an.
 

genodeftest

Erfahrenes Mitglied
Ist ein bisschen Trigonometrie so schwer?
Such dir n Mathe-Buch Mittel- oder Oberstufe an Gymnasien (Geometrie) und das sollte dir reichen. Mehr als Sinus und Cosinus dürfte das nicht werden.

Wenn du etwas genauer beschreibst, was du eigentlich haben willst (besonders: welche Parameter sind variabel, welche sind fest?) sollte das eine Sache von <5 Minuten sein.
 

KarlPichler

Mitglied
ne das buch wäre nicht das problem. aber meine logik ;)
für eine kurve ist es ja kein problem, ein bissl sin und cos ...

aber ich möchte dies dynmisch machen.
ok ich beschreibs nochmals, vl. verschwinden dann die fragen:

hier mal meine momentaner ausbau der app.


erstens: meine kurven werden noch immer nicht geschlossen gezeichnet, warum auch immer, die position passen.

Das grüne Fadenkreuz beschreibt die letzte Position, das graue die angebene Null Position.

zweitens: mit 90° Kurven habe ich keine Problem, allerdings mit anderen Winkeln.
die rote kurve hat 60°.
wie bekomme ich dynamisch die Endposition dieser Kruven?
und nach dieser Kurve müssten alle weitern Bahnteile mitgedreht werden. sprich das rosa rail um 60°, welches schon gedreht wurde, aber auch der grüne 90° Winkel, um 60°.

Ich bin mittlerweile schon am verzweifeln, und bitte euch um etwas Code.

Danke.
 

Anhänge

  • karli4.jpg
    karli4.jpg
    8,9 KB · Aufrufe: 4

Fabio Hellmann

Erfahrenes Mitglied
Hi,
also das dynamische ermitteln der Endposition der Kurven hast du dir doch schon selbst beantwortet --> sin/cos bzw. Satz des Pythagoras.
Das Drehen von allen weitern Teilen ist mit Graphics2D so zu bewerkstelligen, wenn du die Klasse AffineTransform verwendest. Diese stellt eine Methode "rotate" zur Verfügung. Wurde diese aufgerufen, werden alle Elemente die anschließend gezeichnet werden noch "rotiert" gezeichnet, außer du rotierst vorher wieder zurück.

Gruß

Fabio
 

KarlPichler

Mitglied
Ja die endposition der Kurve hab ich schon.

und das mit dem rotate hab ich gefunden allerdings keinen plan wie ich das einsetzen muss.

code snipped

Java:
public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2 = (Graphics2D)g;
        calculateDrawing();
        
        g2.setColor(Color.GRAY);
        g2.setStroke(new BasicStroke(2));
        g2.drawLine(Test5.iNullPointPosX+10, 10,Test5.iNullPointPosX+10, 450);
        g2.drawLine(10, Test5.iNullPointPosY+10,410, Test5.iNullPointPosY+10);

        for (int i=0; i < 30; i++) {

            RectColor = new Color(Randomize(255),Randomize(255),Randomize(255));
            
            g2.setStroke(new BasicStroke(8));             
            g2.setColor(RectColor);

            if(sectionsInt[i][11]<=4)
            {   
                RectTop = sectionsInt[i][1];
                RectLeft = sectionsInt[i][2];
                RectWidth = sectionsInt[i][3];
                RectHeight = sectionsInt[i][4];
               
                g2.drawLine(RectLeft, RectTop, RectWidth, RectHeight);  
            }
            
            if(sectionsInt[i][11] >4 )
            {
                CurveX =sectionsInt[i][5];
                CurveY =sectionsInt[i][6];
                CurveWidth =sectionsInt[i][7];
                CurveHeight=sectionsInt[i][8];
                CurveStartAngle =sectionsInt[i][9];
                curveArcAngle =sectionsInt[i][10];
               // g.drawArc(0, 0, 150, 150, 0,90);
                g.drawArc(CurveX, CurveY, CurveWidth, CurveHeight, CurveStartAngle, curveArcAngle);
            }
}
 

KarlPichler

Mitglied
danke für deine schnelle hilfe

hast du auch einen plan warum es mir den anfang und das ende des drawArc abschneidet?

hab zwar deshalb schon mal ein Thema eröffnet aber funktionieren tuts nicht.
 

Fabio Hellmann

Erfahrenes Mitglied
Ich hab dir damals ja die Antwort drauf gegeben. Da ich aber momentan nicht nachvollziehen kann, welche Werte in deinem int[] stehen, kann ich dir da schlecht weiterhelfen.