Tracer le cercle (à l'aide de pixels appliquée dans une image avec une boucle for)
Je veux dessiner un cercle (avec 1 ou 2 boucles for) à l'aide de pixels position (commence à partir du haut à gauche et se termine en bas à droite)
J'ai réussi a dessiné un rectangle avec cette méthode:
private void drawrect(int width,int height,int x,int y) {
int top=y;
int left=x;
if(top<0){
height+=top;
top=0;
}
if(left<0){
width+=left;
left=0;
}
for (int j = 0; j <width; j++) {
for (int i = 0; i <height; i++) {
pixels[((i+top)*w)+j+left] = 0xffffff;//white color
}
}
}
Les pixels de la matrice contient les pixels de l'indice suivi par sa couleur.
pixels[index]=color;
Avant que j'utilise ce code pour "image" et "pixels", array (si cela vous aide)
img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
pixels = ((DataBufferInt) img.getRaster().getDataBuffer()).getData();
Mais comment puis-je dessiner seulement les pixels blancs comme dans cette image et d'ignorer les autres pixels?
Pixel de l'Image http://oi42.tinypic.com/2u61sud.jpg
Vous voulez sans doute de Google, “Bresenham Cercle” de l'algorithme 🙂
OriginalL'auteur boyd | 2012-01-25
Vous devez vous connecter pour publier un commentaire.
Voici le code pour dessiner un cercle avec des pixels: Il utilise la formule xa = x + r cos(angle) et yend = y + r sin(angle).
Référence: http://www.softwareandfinance.com/Turbo_C/DrawCircle.html
bios.h
,graphics.h
... Sérieusement tonnes de dépendances inutiles. Et sur le dessus de ce que vous avezmath.h
, qui a un PI constante dans encore vous allez définir vos propres...Si votre cercle est trop important, cela ne marchera pas, vous ne trouverez que des 360 points disposés en cercle avec rien entre les deux.
Super! C'est le 6e (ou presque) et certainement le meilleur cercle de l'algorithme, j'ai essayé ce soir. Pas seulement de la cohésion et de la densité aspect, mais aussi à partir d'une vue de mise en plan: il suit exactement un cercle de trajectoire (jamais vu ça et l'amour.) Et un autre avantage: on peut "jouer" avec les "étape" pour tracer le cercle plus rapide. En fait, il n'y a pas besoin de 3600 points. 720 points, à l'aide d'une valeur de 0.5, sont déjà très bien. Upvoted.
OriginalL'auteur Kathir Softwareandfinance
Puisque vous avez déjà une
BufferedImage
, pourquoi ne pas créer un objet graphique pour elle et l'utiliser pour tracer le cercle? De cette façon, vous n'avez pas à réinventer la roue:Mise à jour
Ici est un SSCCE:
Il doit produire une image comme ceci:
J'ai ajouté le code de test j'ai été en utilisant comme exemple. Est-ce que c'est?
je suis à l'aide de f.ajouter(class_object);pour cela, rien ne fonctionne.ajoutez ceci à votre code DrawCircleExample cercle=new DrawCircleExample();f.ajouter(cercle); mais écrire près de la classe public DrawCircleExample cela s'étend de la Toile
Vous avez besoin de remplacer le
paint
méthode de laCanvas
de dessiner l'image sur la toile. J'ai mis à jour l'exemple.OriginalL'auteur Kevin K
Désolé pour le retard
Ce code fonctionne parfaitement
Merci pour l'astuce!
Si vous avez besoin de contour uniquement: si (d >= rayon de -1 && j < rayon + 1) img.SetPixel(i , j,Couleur.Blanc);
OriginalL'auteur boyd
Une façon de le faire serait de tester, pour chaque point dans le rectangle, si oui ou non la distance de ce pixel au centre de la place est inférieur au prévu rayon du cercle. Vous pouvez ensuite dessiner des pixels passent le test et ignorer les pixels qui ne le sont pas. Le rapport de l'aire du cercle de la zone de la surface totale est de π/4, qui est d'environ .77, donc ce n'est pas vraiment tout ce qui inefficace.
Si vous voulez dessiner un arbitraire de forme ovale qui s'inscrit dans le rectangle, vous pouvez utiliser cette même idée, mais serait de modifier le calcul qui permettrait de déterminer la distance au centre, tels que vous donner proportionnellement moins de poids à long axe de l'ellipse.
Espérons que cette aide!
OriginalL'auteur templatetypedef