Προς το περιεχόμενο

drawArc σε Java και περιστροφη τόξων μέσα στον κύκλο


Renobatio

Προτεινόμενες αναρτήσεις

Θα ήθελα την βοήθεια σας γιατί έχω κολλήσει μέρες και ίσως να ναι κάτι που δεν βλέπω. 'Εχω έναν κώδικα που σχεδιάζει ένα δίκτυο γραμμών πρακτικά σχεδιάζει τόξα.
 

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

 public class paint extends Stereonet2{ 
     paint (int x,int y,int radius,Color colour){
         super (x,y,radius,colour);
     }
     @Override
    protected void paintComponent(Graphics g){
        
        super.paintComponent(g);
System.out.println("ppp");
      Graphics2D g2D = (Graphics2D) g;           
      g2D.setStroke(new BasicStroke(2F));  
      g.setColor(Color.BLACK);
      g.drawOval(centreX - radius , centreY - radius, radius * 2 , radius * 2);
     
      g2D.setStroke(new BasicStroke(1F)); 
      g.drawLine(centreX, centreY - radius, centreX, centreX + radius);
      g.drawLine(centreX - radius, centreY, centreX + radius, centreY);

      g2D.setStroke(new BasicStroke(1F));

      
      
      for(int degrees = 10; degrees <= 80; degrees += 10){
          
      
          
          
        double greatRadius = radius / (Math.cos(Math.toRadians(degrees))); // radius of great circle
        int greatX1 = (int)Math.round(centreX + radius * (Math.tan(Math.toRadians(degrees))) 
                                        - greatRadius); // x coord of great circle left hemisphere
        int greatX2 = (int)Math.round(centreX - (radius * (Math.tan(Math.toRadians(degrees)))) 
                                        - greatRadius); // x coord of great circle right hemisphere
        int greatY = (int)Math.round(centreY - greatRadius); // y coord of great circle

        double smallRadius = (radius / (Math.tan(Math.toRadians(degrees))));
        int smallY1 = (int)Math.round((centreY  - (radius / (Math.sin(Math.toRadians(degrees)))) - smallRadius));
        int smallY2 = (int)Math.round((centreY  + (radius / (Math.sin(Math.toRadians(degrees)))) - smallRadius));
        int smallX = (int)Math.round(centreX - smallRadius);

        g.drawArc(greatX1, greatY, 2 * (int)Math.round(greatRadius), 2 * (int)Math.round(greatRadius), 
                  90 + degrees, 180 - ( 2 * degrees));
        g.drawArc(greatX2, greatY, 2 * (int)Math.round(greatRadius), 2 * (int)Math.round(greatRadius), 
                  270 + degrees, 180 - ( 2 * degrees));
        g.drawArc(smallX, smallY1, 2 * (int)Math.round(smallRadius), 2 * (int)Math.round(smallRadius), 
                  270 - degrees, 180 - ( 2 * (90 - degrees)));
        g.drawArc(smallX, smallY2, 2 * (int)Math.round(smallRadius), 2 * (int)Math.round(smallRadius), 
                  90 - degrees, 180 - ( 2 * (90 - degrees)));  

      }

    }

Τώρα θέλω χρησιμοποιώντας τις ιδιότητες της καμπύλης με το κόκκινο χρώμα όπως το ύψος  το πάχος της κλπ να την μετακινήσω αριστερόστροφα κατα 30 μοίρες δηλαδή να ζωγραφιστεί ένα έξτρα τόξο στη θέση της γαλάζιας γραμμής. Το θέμα είναι ότι η drawArc θεωρείται ως εγγεγραμένη σε ορθογώνιο παραλληλόγραμμο για να φτιάξω αυτόν τον κύκλο με τα τόξα του  ήταν σχετικά εύκολο γιατί η εξισώσεις βρίσκονται online απλά τροποποιήθηκαν με την Math.round  γιατι η drawArc παίρνει int κλπ τωρα άν προσθέσω στο startAngle +30 μπακάλικα σε δοκιμές (γιατι το + θεωρεί αριστεροστροφη κίνηση σύμφωνα με το documentation) για να "ζωγραφίσω" την γαλάζια θα μετατεθει αλλα σαν να κινειται σε παραλληλόγραμμο και οχι σε κυκλο οπότε θα βρεθεί όπου να ναι. Συγνώμη αν σας ζάλισα κάθε βοήθεια δεκτή.post-248872-0-04862800-1383866122_thumb.png

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Θες να περιστρεφεται απνω στην σφαιρα; Ή απλα πανω στον z αξονα;

Με μπέρδεψε η αναφόρα σου σε σφαίρα και αξονα z εκτός και αν γνωριζεις εκ των προτέρων την χρήση του δικτύου Schmidt(που πρακτικά είναι αυτό που έφτιαξα). Αλλα ναι θελω να βρισκεται μέσα στον κύκλο. Θεωρησε κεντρο του κυκλου (0,0) χρειάζομαι να κινηθεί η κόκκινη γραμμή αριστερόστροφα διατηρώντας το κεντρο του κυκλου και φυσικα όπως ανεφερα και όλες τις άλλες ιδιοτητες της την καμπυλοτητα της το μήκος της το πάχος της κλπ. Δεν ξέρω αν σε βοήθησα να καταλαβεις...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν εχω ιδεα το τιε ιανι schmidt.

Αν καταλαβα θες να το περιστρεψεις στον αξονα ζ. Απο ενα google βλεπω οτι το graphic2d εχει affine transformation. Αρα ειναι απλο αυτο που θες.

Πριν ζωγραφισεις αυτο που θες, καλεσε την rotate (εχει δυο, μια που παιρνει γωνια και μια που παιρνει γωνια και "κεντρο" )

Εφοσον σεταρεις το transformation ζωγραφισε το τοξο που θες να περιστρεψεις.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...

Χρησιμοποιούμε  cookies για να απολαμβάνεις το insomnia προσωποποιημένο στις ανάγκες σου αλλά και για την παροχή στοιχείων επισκεψιμότητας για να βελτιώσουμε την ποιότητα των υπηρεσιών μας