2010-06-09 12 views
0

Comment puis-je le faire sur une grille avec plusieurs "centres", et donc, ayant des points coïncidents que je veux compter une seule fois?Quel algorithme puis-je utiliser pour déterminer des points dans un demi-cercle?

Quel est le moyen le plus efficace de faire cela?

+1

Votre question n'est pas claire. Voulez-vous dire que vous avez un demi-cercle, et beaucoup de points, et vous voulez déterminer quels points sont à l'intérieur du demi-cercle? – Beta

Répondre

4

Pour savoir si un point, P, est dans un demi-cercle, je considérerais un test en deux parties:

  1. est-P dans le rayon, R, du centre, C?
  2. Est-ce que P est dans le demi-plan correct (c'est-à-dire occupé)?

partie (1) est simple: comparer (P_x-C_x)^2 + (P_y-C_y)^2 (en 2d, ajouter la direction Z en 3D, bien sûr) avec R^2 (ne vous embêtez pas avec les racines carrées, ils prennent du temps et ne pas ajouter n'importe quoi).

La partie (2) est presque aussi simple: définissez le vecteur b = B - C qui coupe le demi-cercle pointant dans le demi-plan occupé. Puis calculer le vecteur v = P - C et prendre le produit scalaire avec b. Si le résultat est positif, le point est dans le demi-plan occupé, s'il est négatif, le point est dans la moitié non occupée et si 0 le point tombe sur la ligne de division. Le produit scalaire de 2d est v*b = v_x*b_x + v_y*b_y comme d'habitude.