Question

Disons que nous avons une toile 400x800 et je veux tracer une ligne reliant les points P1 (10,10) et P2 (500000,800000). Comme vous pouvez le voir le deuxième point est loin en dehors des limites de la toile. Si j'utilise canvas.darwLine (P1.x, p1.y, p2.x, p2.y, peinture) le gel d'application et l'application devient inutilisable. en utilisant une coupure ne résout pas le problème, le moteur de dessin est encore en train de dessiner les pixels à tout le chemin vers le deuxième point

Toute suggestion ou une solution de contournement?

Était-ce utile?

La solution

Si P2 est en dehors de la zone visible (480x800 dans ce cas particulier), puis calculer l'intersection de cette ligne avec bordure, puis utilisez un point d'intersection au lieu de P2.

Autres conseils

Vous pouvez réduire votre ligne, avec quelque chose comme ceci:

int maxX = 400;
int maxY = 800;

//Calculate how much we have to scale down to fit in the bounds:
float scaleX = (maxX - p1.x)/p2.x;
float scaleY = (maxY - p1.y)/p2.y;

//Get the smallest scale, so that we fit in both axises.
float scale = Math.min(scaleX, scaleY);

//Only scale if we are scaling down. There is no need to make lines smaller than the screen scale up to the screen bounds:
if(scale < 1.0f){
    p2.x *= scale;
    p2.y *= scale;
}

Je n'ai pas essayé, donc je ne peux pas garantir que cela fonctionnera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top