2014-06-24 3 views
0

Je veux remplir un triangle dans Android en utilisant la classe Canvas. La façon dont je suis en train de travailler fonctionne actuellement mais elle est très décalée. Je voulais savoir si quelqu'un avait une façon plus rapide de le faire que moi. Merci!Dessiner un triangle tournant

Mon code:

public void rotate(float angle){ 
    if(neighbour == null) 
     return; 
    path.reset(); 
    Point origin = rotatePoint(neighbour.getX() + 64, neighbour.getY() + 128 + 16, neighbour.getX() + 64, neighbour.getY() + 64, angle); 
    Point a = rotatePoint(neighbour.getX() + 64, neighbour.getY() + 128 + neighbour.getWidth() + neighbour.getHeight(), neighbour.getX() + 64, neighbour.getY() + 64, angle - 15); 
    Point b = rotatePoint(neighbour.getX() + 64, neighbour.getY() + 128 + neighbour.getWidth() + neighbour.getHeight(), neighbour.getX() + 64, neighbour.getY() + 64, angle + 15); 
    path.moveTo(origin.x, origin.y); 
    path.lineTo(a.x, a.y); 
    path.lineTo(b.x, b.y); 
} 

voisin est juste une classe qui détient des valeurs x et y.

méthode du point Rotation:

private Point rotatePoint(float x, float y, float px, float py, float angle){ 
    float s = (float)Math.sin(Math.toRadians(angle)); 
    float c = (float)Math.cos(Math.toRadians(angle)); 

    x -= px; 
    y -= py; 

    float xnew = x * c - y * s; 
    float ynew = x * s + y * c; 

    x = xnew + px; 
    y = ynew + py; 
    return new Point((int)x, (int)y); 
} 

Ce triangle est tourné assez souvent donc je besoin d'un moyen efficace de le faire.

Répondre

1

Vous pouvez toujours dessiner le triangle toujours avec le même chemin, mais avant de tracer le chemin, faites pivoter le canevas selon l'angle de rotation souhaité.

canvas.save(); 
canvas.rotate(degrees); 
//draw your triangle here 
canvas.restore(); 

Il y a aussi un

canvas.rotate(degrees, x, y); 

si vous avez besoin de lui donner un point de pivot.

+0

Merci, complètement oublié cette fonction! Je vais essayer quand j'ai le temps. – TameHog

Questions connexes