Iniciando uma campanha para dar mais amor para algumas classes que estão precisando. Ao todo a campanha corresponde a 5 trabalhos cujas notas são binárias. Algumas classes possuem menos tarefas que 5, enquanto outras podem ter mais. Caso você tenha cumprido todas as tarefas de uma classe e queira adotar outra para chegar nas 5 tarefas necessárias, fique a vontade. As tarefas podem ser realizadas em dupla ou individualmente.
Listamos classes com as respectivas tarefas agrupadas por temas. Note que todos os trabalhos devem vir documentados e com testes unitários!
- Manter estatísticas do tempo gasto em renderização e no loop de física
- Investigar e implementar clocks mais precisos que o time.time() e time.sleep()
- Implementar o método schedule_task() que registra tarefas que serão executadas apenas quando o loop estiver desocupado
Inicializadores de objetos: inicia um grupo de objetos de maneira previsível ou aleatória. Ex.: Cores aleatórias, inicia em grade, inicia dentro de contorno, etc.
- 1-5) 'almost_equals', 'angle', 'clamped', 'distance_to', 'is_null',
- 'lerp' (linear interpolation), 'perpendicular', 'polar', 'project', 'reflect', 'scaled_to'
1-5) Vetor 3D -- operações matemáticas e outros métodos da classe Vector.
1-5) Vetor 4D -- operações matemáticas e outros métodos da classe Vector.
Sequência de vetores 2D
1-5) operações matemáticas vetor a vetor
- 1-5) Matrix 3x4 -- operações matemáticas + colvecs, rowvecs, flat, det,
- trace, transposed
- eigval e eigvec
7) inv 8-9) RotMatrix3: matriz de rotação
- Testes de superposição e interseção, com outro círculo ou ponto
- Distância entre círculo e reta ou segmento
- Interseção entre círculo e reta ou segmento
- Intersecção com outro segmento
- Testes de segmentação de ponto e círculo
- função de bound box máximo
2) testar se o polígono é simples 3-4) separar polígono complexo em vários simples
Implementar intersecção entre figuras geométricas
- aabb e círculo
- aabb e aabb
- segmento e aabb
4) segmento e círculo 4) polígono e aabb 5) polígono e círculo
- implementar grande AABB invariante por rotações
- Construtor da classe triangulo
- Sub-classe Blob: polígono convexo randômico
Implementar classe que agrupa vários objetos
- distribuir funções tipo move, rotate para todos sub-objetos
- função split para desagrupar (mas mantendo velocidades consistentes)
- cálculo de massa, c.m e momento de inércia
- cálculo da AABB
- mecanismo de AABB invariante como em Poly
Várias coisas aqui: implementar integradores mais avançados, modelos de força adicionais etc. Mouse force: força aplicada pelo clique do mouse
- Implementar propriedades para red, green blue, alpha
- Implementar conversões de RGB para HSV (hue, saturation, value)
- Implementar conversões de HSV para RGB
- Implementar conversões de RGB para HSL (hue, saturation, lightness)
- Implementar conversões de HSL para RGB
- Implementar suporte para rotação e translação de todos os objetos dentro da árvore
- Derivar Tree de Drawable e implementar os métodos rescale e transform
Esta classe ainda não existe!
- Definir a interface de Texture (ver pygame, sdl2 e outras bibliotecas para inspiração)
- Implementar transformações simples como espelhos
- Tornar a Texture renderizável (conversar com o prof. sobre as outras classes afetadas)
4-5) Implementar um banco de texturas
- Implementar o método paint_pixel de algum backend (de preferência o pygame)
- Implementar paint_aabb pixel a pixel
- Implementar paint_rect pixel a pixel
- Implementar paint_circle pixel a pixel
- Implementar paint_poly pixel a pixel (somente polígonos convexos)