O bule de chá de Utah , originalmente criado por Martin Newell, é um objeto conveniente para testar programas gráficos 3D.
A tarefa é criar uma imagem em wireframe do bule na projeção em perspectiva. Para incentivar a idéia de um aplicativo de código-fonte , a visualização e o controle da câmera podem ser isolados e excluídos da contagem. É assim que os parâmetros e o arquivo de entrada podem ser modificados e o código reutilizado para gerar diversas imagens, mas não é necessário criar um utilitário completo que aceite argumentos complicados da linha de comando. Um equilíbrio "hacker" é procurado.
ref. StackOverflow: Como os patches de Bezier funcionam no bule de chá de Utah?
Portanto, existem três subtarefas aqui:
- ler os dados do bule em seu formato original .
- subdividir os dados do patch usando a divisão deCasteljau ou outro método. Outros métodos estão usando matrizes de base de Bezier e avaliando os polinômios (refs padrão, como Foley e van Dam, Newmann e Sproull) ou métodos de base de Bernstein (que ainda estão além de mim).
- projete os pontos em 2D (se o idioma não suportar 3D nativamente) e desenhe o contorno de cada pequena mancha como vista em um ponto de olho cuja vista esteja centrada em um ponto LookAt e cujo eixo vertical esteja alinhado com o eixo vertical do bule (ou seja, desenhe-o "na vertical" de um bom ponto de vista).
Assumindo que a leitura de dados de texto orientados a linhas de um arquivo seja um pequeno problema, esse desafio é realmente sobre a prática dos dados de correção Bezier Bicieric.
Como o teste normal simples para seleção da face posterior não é suficiente (os remendos não são todos orientados para o exterior), nenhuma remoção de linha oculta ou de superfície é necessária. Como estrutura de arame, deve ficar bem com as costas visíveis. A aparência pode ser melhorada ajustando a largura da linha, dependendo da distância do olho, mas isso não é estritamente necessário (meus próprios programas não fazem isso).
Isso é tanto código-golfe quanto roseta-pedra . As respostas que competem no golfe devem incluir uma contagem normalmente. Porém, envios em idiomas incomuns são muito encorajados, mesmo que não sejam particularmente curtos.
Para os entusiastas da complexidade Kolmogorov, há um conjunto de dados mais conciso onde o conjunto completo pode ser reconstruído adicionando rotações e espelhamento de patches. E em A Trip Down the Graphics Pipeline , de Jim Blinn , existe um método de geração ainda mais conciso, usando o fato de que os patches individuais têm simetrias rotacionais ou outras. Todo o corpo (ou tampa) pode ser descrito por uma única curva de Bezier, que é girada em torno do eixo y. O bico e as alças podem ser descritos pelas duas curvas de seu perfil e, em seguida, selecionando os pontos de controle intermediários para aproximar uma extrusão circular.
fonte
glutSolidTeapot
eglutWireTeapot
!glutWireTeapot
.Respostas:
Processando (java), 314 (237 sem controle da câmera)
Não incluindo as definições da matriz:
Definições de matriz de dados:
Versão mais legível:
E algumas fotos:
Outra versão com alguns efeitos interessantes:
fonte
stroke(-1)
é um byte mais curto questroke(255)
Postscript
Não é totalmente um jogo de golfe, mas isso ilustra uma abordagem diferente da subdivisão deCasteljau: avaliar o polinômio de base. Usos mat.ps .
1112
Retirar as linhas verticais e descontar os parâmetros gera essa versão do 1112 caracteres. Usos mat.ps .
fonte