La théière Utah , créée à l'origine par Martin Newell, est un objet pratique pour tester des programmes graphiques 3D.
La tâche consiste à créer une image filaire de la théière en projection en perspective. Pour encourager l'idée d'une application de code source , le contrôle de la visualisation et de la caméra peut être isolé et exclu du décompte. C'est ainsi que les paramètres et le fichier d'entrée peuvent être modifiés et le code réutilisé pour générer des images diverses, mais il n'est pas nécessaire de créer un utilitaire à part entière qui accepte des arguments de ligne de commande compliqués ou autres. Un équilibre "pirate" est recherché.
réf. StackOverflow: Comment fonctionnent les correctifs Bézier dans la théière Utah?
Il y a donc trois sous-tâches ici:
- lire les données de la théière dans leur format d'origine .
- subdiviser les données de patch en utilisant le fractionnement deCasteljau ou une autre méthode. D'autres méthodes utilisent des matrices de base de Bézier et évaluent les polynômes (références standard, comme Foley et van Dam, Newmann et Sproull), ou les méthodes de base de Bernstein (qui me dépassent toujours).
- projeter les points en 2D (si la langue ne prend pas en charge la 3D en natif) et dessiner le contour de chaque petit patch vu depuis un point Eye dont la vue est centrée sur un point LookAt et dont l'axe vertical est aligné avec l'axe vertical de la théière (c.-à-d. dessinez-le "debout" d'un joli point de vue).
Si l'on suppose que la lecture des données de texte orienté ligne à partir d' un fichier est peu de mal, ce défi est vraiment obtenir les mains sur avec bicubique données de patch de Bézier.
Étant donné que le simple test normal pour l'abattage de face arrière n'est pas suffisant (les patchs ne sont pas tous orientés vers l'extérieur), aucun retrait de ligne cachée ou de surface n'est nécessaire. En tant que filaire, il devrait bien paraître avec le dos visible. L'apparence peut être améliorée en ajustant la largeur de la ligne en fonction de la distance de l'œil, mais ce n'est pas strictement nécessaire (mes propres programmes ne le font pas).
C'est à la fois du golf de code et de la pierre de rosette . Les réponses concourant dans le golf devraient inclure un compte comme normal. Mais les soumissions dans des langues inhabituelles sont très encouragées, même si elles ne sont pas particulièrement courtes.
Pour les amateurs de complexité de Kolmogorov, il existe un ensemble de données plus concis où l'ensemble complet peut être reconstruit en ajoutant des rotations et une mise en miroir des correctifs. Et dans A Trip Down the Graphics Pipeline de Jim Blinn , il existe une méthode de génération encore plus concise en utilisant le fait que les correctifs individuels ont des symétries de rotation ou autres. L'ensemble du corps (ou couvercle) peut être décrit par une seule courbe de Bézier qui est tournée autour de l'axe y. Le bec et les poignées peuvent être décrits par les deux courbes de leur profil, puis en sélectionnant les points de contrôle intermédiaires pour approximer une extrusion circulaire.
la source
glutSolidTeapot
etglutWireTeapot
!glutWireTeapot
.Réponses:
Traitement (java), 314 (237 sans contrôle de caméra)
Non compris les définitions de tableau:
Définitions des tableaux de données:
Version plus lisible:
Et quelques photos:
Une autre version avec des effets intéressants:
la source
stroke(-1)
est un octet plus court questroke(255)
Postscript
Pas entièrement golfé, mais cela illustre une approche différente de la subdivision deCasteljau: évaluer le polynôme de base. Utilisations mat.ps .
1112
En supprimant les lignes verticales et en actualisant les paramètres, on obtient cette version à 1112 caractères. Utilisations mat.ps .
la source