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

Draw line in the perimeter of shape in Java!


panoramix222000

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

Δημοσ.

Καλησπέρα και Χρόνια Πολλά, θα ήθελα να μου δώσει κανένα tip ή μια αρχή πώς θα ζωγραφίζω πάνω σε ένα σχήμα(στην περίμετρο του σχήματος) στην Java γραμμές! Έχω και ένα πρόβλημα, έχω ένα frame και πάνω τοποθετώ μια έλλειψη στο κέντρο του frame και μετά πάω να ζωγραφίσω και μια γραμμή πάνω στο frame και εξαφανίζετε η έλλειψη!

 

Ευχαριστώ προκαταβολικά για τον χρόνο σας!

Δημοσ.

γεια σου

αφενος, δεν πολυ καταλαβα, θες να σχεδιασεις κατι πανω στο περιγραμμα ενος προσχεδιασμενου σχηματος;

αφετερου, βαλε τον κωδικα που εχεις γραψει μπας και μπορεσει να τον διορθωσει καποιος....

Δημοσ.

Αυτό που θέλω είναι να κάνω αυτό:

http://imageshack.gr/view.php?file=qi892pqng1p8vgug0cnw.jpg

 

Και ο κώδικας μου είναι αυτός:

>public class Main {

   public static void main(String[] args) {
       
       new MyFrame().setVisible(true);
   }

}

 

>import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;

public class MyFrame extends JFrame{
   MyFrame(){
       super("MyFrame");
       Toolkit t=this.getToolkit();
       Dimension wsize=t.getScreenSize();
       this.setBounds(wsize.width/4,wsize.height/4,wsize.width/2,wsize.height/2);
       center=new MyComponent();
       first=new Mycurveline(50,50);

       getContentPane().add(center);
       getContentPane().add(first);
       
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }
   private MyComponent center;
   private Mycurveline first;

}

 

>import java.awt.Color;

import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;

public class MyComponent extends JComponent{
   
   MyComponent(){
       
   }

   @Override
   protected void paintBorder(Graphics g) {
       super.paintComponent(g);
       Graphics2D g2 = (Graphics2D)g;
       g2.drawOval(getSize().width/3, getSize().height/3, getSize().width/3,getSize().height/3);

   }

   @Override
   protected void paintComponent(Graphics g) {
       super.paintComponent(g);
       Graphics2D g2 = (Graphics2D)g;
       g2.setColor(Color.RED);
       g2.fillOval(getSize().width/3, getSize().height/3, getSize().width/3,getSize().height/3);

   }

}

 

>import java.awt.Graphics;
import java.awt.Graphics2D;

import java.awt.geom.QuadCurve2D;
import javax.swing.JComponent;

public class Mycurveline extends JComponent{

   Mycurveline(double x,double y){
       this.x=x;
       this.y=y;
   }

   @Override
   public void paint (Graphics g) {
       super.paintComponent(g);
       Graphics2D g2 = (Graphics2D) g;
       // create new QuadCurve2D.Float
       QuadCurve2D q = new QuadCurve2D.Float();
       // draw QuadCurve2D.Float with set coordinates
       q.setCurve(x,y,x+10,y,x+20,y+20);
       g2.draw(q);
   }

   private double x,y;
}

Δημοσ.

καταρχην, υπαρχει λογος συγκεκριμενος που εχεις το οβαλ και την καμπυλη σε ξεχωριστα components?

αν ναι, εκτος απο τον προφανη μπελλα του προσανατολισμου των καμπυλων, θα πρεπει να παιξεις (πολυ) και με τα layouts για να τα κατανειμεις σωστα

 

Αν τωρα αυτο που θες ειναι απλα να φτιαξεις μια παραμετρικη εικονα, καλο ειναι να τα βαλεις ολα στο ιδιο κομπονεντ που θα λειτουργει σαν καμβας.

Χωρις να το εχω υλοποιησει, οι πρωτες ιδεες που μου ερχονται στο μυαλο ειναι:

 

Χρειαζεσαι τη συναρτηση της ελλειψης που θα ζωγραφιστει (δε θυμαμαι πως το υλοποιει η ετοιμη συναρτηση της Java, ισως χρειαστει να την ζωγραφιζεις εσυ με καποια custom μεθοδο. Ισως)

Θα παιρνεις μια ευθεια που ξεκινα απο το κεντρο της έλλειψης, θα την τεμνει σε καποιο σημειο και θα επεκτεινεται λιγο ακομα.

Με το παρακατω σχημα, βλεπεις πως θα παιρνεις απο την ευθεια τα δυο σημεια που θες για μια καμπυλη (x1,y1) + (x2,y2).

Ομοιως θα παραγονται και οι υπολοιπες καμπυλες φτιαχνοντας αντιστοιχες ευθειες ακτινωτα.

Αυτη η προσεγγιση παντως θελει λιγα μαθηματικουλια αλλα ειναι ωραιος γριφος, παλεψε τον

oval.jpg

 

 

Καλη συνεχεια

  • 3 εβδομάδες αργότερα...
Δημοσ.

για το πρόβλημα που αναφέρεις ότι σβήνετε η έλλειψη όταν ζωγραφίσεις την καμπύλη

 

πρέπει να σχεδιάζονται και τα 2 ή όσα θες στην ίδια paintComponent

δες αυτό που έχω κάνει εγώ εδώ.

οι τιμές που έχεις βάλει στην έλλειψη όμως αλλάζουν με το resize του jframe

δες το.(βάλε σταθερές τιμές και όχι μεταβλητες τιμές-->getSize().width())

design2d.zip

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...