2012-03-25 1 views
0

J'écris un programme avec SDL. Je configure l'écran en 600x600. Je dessine ensuite un cercle sur les fenêtres. Je tire au hasard l'ensemble de l'écran avec des points et enfin compter combien de points sont dans le cercle, ce qui peut être utilisé pour estimer la superficie du cercle. Mais j'ai trouvé que si j'initialiser la fenêtre à plus grande (comme 1024 * 768) alors la même méthode diminuera la précision du calcul de la surface (dans une petite mesure mais pas si petite). Je veux savoir augmenter la résolution des fenêtres ne contribue pas à améliorer la résolution de ce problème? Alors, comment puis-je profiter de la plus grande résolution?concernant la résolution et l'exactitude dans SDL

+3

Peut-être parce que 1024x768 n'est pas carré, donc il y a plus de points en dehors du cercle? – Kos

+0

Juste par intérêt, pourriez-vous pas travailler sur la zone du cercle en trouvant plutôt son rayon et en évaluant 'pi * r^2'? Ou est-ce que je manque quelque chose? –

+1

Aussi comment générez-vous vos nombres aléatoires? 'rand()' n'est pas assez aléatoire si vous voulez faire des numériques. Inclure '' et utiliser 'std :: mt19937', vérifiez si cela aide – Kos

Répondre

0

Ensuite, je dessine un cercle sur les fenêtres. Je tire au hasard l'ensemble de l'écran avec des points et enfin compter combien de points sont dans le cercle, ce qui peut être utilisé pour estimer la superficie du cercle.

Zone de cercle est égal à pi*(r^2). Où "r" est le rayon du cercle.

Mais je trouve que si j'initialiser la fenêtre pour plus

Votre méthode ne produira pas des résultats fiables à moins générateur de nombres aléatoires est parfait Cela signifie qu'il doit produire une distribution uniforme absolument parfaite de points , ce qui ne va pas arriver. Aussi, vous aurez besoin de connaître la zone d'un "hit", ce qui sera un gros problème.

Si vous insistez pour réinventer la roue (et évitez d'utiliser pi*(r^2) pour une raison inconnue), alors au lieu de "tirer des points aléatoires". il suffit de numériser l'image ligne par ligne et de calculer le nombre de points qui se trouvent à l'intérieur du cercle. Il va probablement aussi beaucoup plus vite que d'essayer d'abuser du générateur de nombres pseudo-aléatoires. Et vous pouvez accélérer le processus (en perdant la précision) et au lieu de vérifier chaque pixel, vérifiez tous les deuxièmes pixels (et chaque rangée), tous les trois, tous les quatre et ainsi de suite (distribution uniforme parfaite). Ce sera beaucoup plus fiable et prévisible que votre abus PRNG.