2010-08-31 8 views
2

Je voudrais bin des vecteurs dans l'espace à n dimensions. Cela peut être fait en pixellisant la surface d'une hypersphère n-dimensionnelle.Besoin d'un algorithme pour pixelliser une hypersphère n-dimensionnelle

Est-ce que quelqu'un connaît de bons algorithmes pour pixelliser une hypersphère en C? Je voudrais des tailles de poubelle constante. Mon espace est constitué uniquement d'entiers positifs.

+1

Pourriez-vous clarifier? Par "pixelate", voulez-vous dire "diviser la surface en régions"? Est-ce que cela implique que tous les vecteurs d'entrée se trouvent sur la surface? –

+0

Merci pour votre commentaire, oui; la surface doit être divisée en régions de surface égale. Chacun des vecteurs est orthogonal à la surface. – KeatsKelleher

+0

Vous avez potentiellement besoin de plus de contraintes que cela pour définir un algorithme. Par exemple, imaginez diviser une sphère en 3 dimensions en 8 régions. Vous pourriez faire 8 bandes nord-sud, ou vous pourriez faire 8 "coins" (c'est-à-dire des lignes de division sur l'équateur, le méridien de Greenwich, et à 90/270 degrés de longitude). Et cela suppose qu'ils doivent tous avoir la même forme ... –

Répondre

1

Avez-vous besoin que vos bacs soient parfaitement réguliers? Si ce n'est pas le cas, lancez les points au hasard et mesurez la distance par rapport au voisin le plus proche. Vous pouvez le nettoyer légèrement en jetant des points qui sont trop proches, ou en exécutant quelques itérations de répulsion mutuelle. Sinon, vous voudrez probablement convertir generalized spherical coordinates et bin en zones égales le long de chaque dimension. En particulier, si vous savez que vous êtes dans le bac 5 de 20 sur la longitude, vos bacs de latitude seront plus larges qu'ils ne le seraient à l'équateur (environ sqrt (2) plus large en angle, en fait, pour correspondre à la même distance la surface).

+0

Ce n'est pas si mal d'une idée. Je le crie ... – KeatsKelleher

+0

Je crois que c'est la voie à suivre. Je n'ai pas fini l'algorithme mais c'est la bonne piste :) – KeatsKelleher