2016-11-08 4 views
-1

J'ai donc obtenu ceci qui est un triangle, mais comment le colorier? Je suis nouveau à Java alors supportez avec moi. Je veux aussi plus tard le copier et le coller à côté, puis le tourner sur sa tête. Le chiffre que j'essaye de construire est un Kite (comme vous pouvez le voir il est principalement construit dans différentes parties de traingles).Java - Comment puis-je remplir un triangle et le faire pivoter? (Polygone)

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    this.setBackground(Color.yellow); 

    //this is where the triangle starts 
    g.setColor(Color.RED); 
    g.drawPolygon(new int[] {40, 80, 120}, new int[] {100, 20, 100}, 3); 

Merci d'avance !!!

+0

'fillPolygon' remplira la forme avec votre couleur. –

+0

Alors, qu'est-ce que j'ai besoin de coder? Désolé, je suis un noob total :( – ZanicL3

+1

'g.drawPolygon' dessine un contour. Couleurs' g.fillPolygon' dans cette ligne Si vous lisez le [documentation] (http://docs.oracle.com/javase/8/ docs/api/java/awt/Graphics.html) vous pouvez voir cette méthode. –

Répondre

1

Ce que vous pouvez faire est de lancer l'objet graphique g vers un objet 2D grphics. Par exemple:

Graphics2D g2 = (Graphics2D) g; 

vous permettra d'utiliser les outils inclus dans le package Graphics2D, que vous devrez importer. Ensuite, vous pouvez créer le triangle:

Polygon tri = new Polygon(new int[] {40, 20, 80}, new int[] {100, 20, 100}, 3); 

Ensuite, vous devez tourner le triangle THETA degrés vers la droite arround son centre et créer, rempli:

g2.rotate(Math.toRadians(THETA), (140/3), (220/3)); 
g2.fill(tri); 

Cela va créer le triangle spécifié par les coordonnées {40, 20, 80} et {100, 20, 100}, pivotés par THETA degrés. La raison pour laquelle j'ai spécifié les 2 paramètres supplémentaires de rotation est parce qu'elle tournerait autour de (0, 0) si elles n'étaient pas spécifiées. 140/3 est simplement la moyenne des coordonnées x, et 220/3 est la moyenne des coordonnées y. Si vous connaissez bien votre géométrie, vous reconnaîtrez cela comme le centroïde d'un triangle. Si vous tournez de la même quantité à chaque fois, vous pouvez simplement convertir THETA en radians à la main. Il y a cependant une autre façon de le faire. Vous pouvez faire pivoter chaque point autour du centroïde du triangle, puis dessiner le polygone défini par ces points. Pour ce faire, il est plus facile de dériver une formule à partir de la matrice de rotation générale. Parce que c'est Stack Overflow, je ne peux pas vous montrer très facilement la dérivation de la formule sans le support de LaTex. À la fin, le point (x, y) peut être tourné autour du centre du triangle (xc, yc), par THETA degrés. en utilisant la formule rX = ((x - xc) * cos(THETA)) - ((y - yc) * sin(THETA) + xc pour obtenir la coordonnée x du point pivoté, et rY = ((x - xc) * sin(THETA)) + ((y - yc) * cos(THETA)) + yc. Je crois que vous pouvez adapter cela à Java, mais si vous avez besoin d'aide, dites-moi. Rappelez-vous, Math.cos() et Math.sin() prennent leur paramètre en radians, pas en degrés. Vous aurez également besoin de l'arrondir, car le Math.toRadians() ne renverra pas une valeur exacte, donc la plupart des valeurs fournies à Math.cos() ou Math.sin() seront évaluées à 0.