largeur d'un tronc de cône à une distance donnée par rapport au plan proche

StackOverflow https://stackoverflow.com/questions/2612101

  •  25-09-2019
  •  | 
  •  

Question

J'utilise CML pour gérer le calcul 3D dans un projet d'interface OpenGL je fais pour le travail . Je dois connaître la largeur de la visualisation à une frustum certaine distance du point d'oeil, qui est conservé comme une partie d'une matrice 4x4 qui représente la caméra. Mon but est de positionner des objets graphiques le long du bord apparent de la fenêtre, mais à une certaine distance dans l'écran du plan de coupe près.

CML a une fonction d'extraire les plans du tronc de cône, en leur donnant avant Ax + By + Cz + D = 0 forme. Ce tronc de cône est perpendiculaire à la caméra, qui ne sont pas nécessairement alignés avec l'axe z de la projection en perspective.

Je souhaite extraire des coordonnées x et z de façon à cerner les éléments graphiques sur les côtés de l'écran à des distances différentes de la caméra. Quelle est la meilleure façon de s'y prendre pour le faire?

Merci!

Était-ce utile?

La solution

Cela semble être un double de Trouver une longueur latérale d'une coupe transversale d'une pyramide pyramide tronquée / tronquée , si vous disposez déjà d'une section de largeur connue une distance connue du sommet. Si vous ne l'avez pas et que vous voulez obtenir la réponse vous-même, vous pouvez suivre ces étapes.

  1. Prenez deux plans adjacents et trouver leur ligne d'intersection L1. Toi peut utiliser les étapes . Vraiment ce que vous avez besoin est la direction vecteur de la ligne.
  2. Prenez deux avions, un même comme dans l'étape précédente, et trouver leur ligne d'intersection L2.
  3. Notez que tous les plans de la forme Ax + By + Cz + D = 0 passer par l'origine, vous savez que L1 et L2 recouper.
  4. dessiner vous-même une image de la des vecteurs de direction pour L1 et L2, queues à l'origine. Ceux-ci forment un angle; appeler thêta. Trouver thêta en utilisant la formule de l'angle entre deux vecteurs, par exemple, .
  5. Dessine une bissectrice de cet angle. Dessiner une perpendiculaire à la bissectrice à la distance d que vous voulez de la origine (cela crée isocèle triangle, traversée en deux triangles rectangles congruents). le longueur de la perpendiculaire est votre largeur désirée en tronc de cône w. Notez que w est deux fois la longueur d'une des bases des triangles.
  6. Soit r la longueur de la hypoténuses des triangles rectangles. Puis r cos (thêta / 2) = d et r sin (thêta / 2) = p / 2, de sorte que tan (thêta / 2) = (p / 2) / d qui implique w = 2d * tan (thêta / 2). Puisque vous connaissez d et thêta, vous avez terminé.

Notez que nous avons trouvé la longueur d'un côté d'une coupe transversale d'un tronc de cône. Cela fonctionne avec une section perpendiculaire de tout tronc de cône. Cela peut être étendue afin de l'adapter à une section transversale non perpendiculaire.

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