Overview
Arquitetura
- geomez-core: módulo puro de geometria, sem nenhuma dependência de renderização. Pode ser adicionado a qualquer projeto JVM sem overhead adicional.
- geomez-visualization: módulo opcional que adiciona as funções .plot() e .addPlotCommands() a todos os tipos do core, delegando a renderização ao Python via a bridge matplotlib4k.
Primitivas Geométricas
- Point2D, Vector2D, Direction2D — elementos fundamentais com igualdade tolerante a erros de ponto flutuante
- CoordinateSystem2D — sistemas de coordenadas representados por matrizes afins 3x3
- Polynomial, LinearSpline, CubicSpline — funções escalares com derivação e integração analíticas
- BezierCurve, CubicBezierSpline2D, ParametricCurve2D — curvas paramétricas flexíveis
- Polygon2D, ConvexPolygon2D — polígonos com cálculo de área via fórmula de Gauss
- Point3D, Vector3D, Direction3D — análogos tridimensionais das primitivas 2D
- CoordinateSystem3D — matrizes afins 4x4 para transformações no espaço
- ParametricCurve3D, ParametricSurface3D — curvas e superfícies paramétricas com normais numéricas
- Curve3D — coleção discreta e ordenada de pontos 3D
O Poder das Abstrações
Kotlin na Prática
Operator Overloading
val p1 = Point2D(1.0, 2.0)
val p2 = Point2D(3.0, 4.0)
val soma = p1 + p2 // Point2D(4.0, 6.0)
val diferenca = p2 - p1 // Point2D(2.0, 2.0)
val escalonado = p1 * 2.0 // Point2D(2.0, 4.0)
val invertido = -p1 // Point2D(-1.0, -2.0)val polinomio = Polynomial(listOf(1.0, 2.0, 3.0)) // p(x) = 1 + 2x + 3x²
val y = polinomio(2.5) // avalia p(2.5) = 23.75
val curva = BezierCurve(listOf(
Point2D(0.0, 0.0),
Point2D(0.5, 1.5),
Point2D(1.5, 1.5),
Point2D(2.0, 0.0)
))
val ponto = curva(0.5) // Point2D na curva para t = 0.5
// Polinômios também suportam aritmética entre si
val p3 = polinomio * Polynomial(listOf(0.0, 1.0)) // multiplicação
val quadrado = polinomio pow 2 // (1 + 2x + 3x²)²Desestruturação de Variáveis
// Extração direta de coordenadas
val (x, y) = Point2D(5.0, 7.0)
val (x, y, z) = Point3D(1.0, 2.0, 3.0)
// Usada internamente para construir a matriz afim de um sistema de coordenadas
val (x1, x2) = xDirection
val (y1, y2) = yDirection
val (p1, p2) = origin
val affineMatrix = SimpleMatrix(arrayOf(
doubleArrayOf(x1, y1, p1),
doubleArrayOf(x2, y2, p2),
doubleArrayOf(0.0, 0.0, 1.0)
))Extension Functions
// Extensões em List<Point2D>
val points: List<Point2D> = curva(linspace(0.0, 1.0, 100))
val xs = points.xPoints // extrai todas as coordenadas x
val ys = points.yPoints // extrai todas as coordenadas y
val centro = points.centroid // ponto médio da coleção
val comprimento = points.length // comprimento do arco
// Extensão para igualdade segura em ponto flutuante
val iguais = 0.1 + 0.2.equalsDelta(0.3) // true (delta = 1e-10)Tecnologias
- Kotlin 2.x — linguagem principal, aproveitando operator overloading, desestruturação e extension functions
- EJML (Efficient Java Matrix Library) — operações com matrizes afins 3x3 e 4x4
- matplotlib4k — bridge Kotlin-Python para delegação da renderização ao matplotlib
- MkDocs — documentação hospedada em geomez.com
Links
- Repositório: github.com/daanrsantiago/GeomEz
- Documentação: geomez.com


