Boa biblioteca de geometria em python? [fechadas]

97

Estou procurando uma biblioteca boa e bem desenvolvida para manipulações e avaliações geométricas em python, como:

  • avaliar a interseção entre duas linhas em 2D e 3D (se houver)
  • avaliar o ponto de intersecção entre um plano e uma linha, ou a linha de intersecção entre dois planos
  • avaliar a distância mínima entre uma linha e um ponto
  • encontre o ortonormal para um plano que passa por um ponto
  • girar, traduzir, espelhar um conjunto de pontos
  • encontre o ângulo diedro definido por quatro pontos

Tenho um livro de compêndio para todas essas operações e poderia implementá-lo, mas infelizmente não tenho tempo, então gostaria de uma biblioteca que o faça. A maioria das operações é útil para fins de jogos, então tenho certeza de que algumas dessas funcionalidades podem ser encontradas em bibliotecas de jogos, mas prefiro não incluir funcionalidades (como gráficos) de que não preciso.

Alguma sugestão ? obrigado

Stefano Borini
fonte
Se você está bem apenas com 2D, então você pode verificar isto .
Pithikos,

Respostas:

35

Talvez dê uma olhada no SymPy .

John Y
fonte
2
Não atende aos meus requisitos, mas é realmente um projeto legal, então aceito sua resposta como uma sugestão interessante também para o futuro (já que SymPy tem um módulo de geometria e uma grande quantidade de desenvolvedores)
Stefano Borini
1
2d apenas tristemente. Não é realmente um motor de geometria construtiva.
meawoppl
3
O módulo de geometria do SymPy também pode ser muito, muito lento. Uma vez que foi projetado para fazer matemática simbólica, ele prefere usar expressões precisas em vez de valores aproximados de ponto flutuante. Dada a quantidade de raízes quadradas que normalmente estão envolvidas em cálculos geométricos, você pode imaginar como essas expressões ficam realmente grandes e muito lentas.
dusktreader
3
A atualização para SymPy agora contém bibliotecas 3D também
control_fd
Obrigado por esta resposta. Estou testando o SymPy agora. O primeiro experimento parecia ser bastante lento para executar - mesmo para um objeto 2D simples. Alguma ideia se é bom para processar geometria em tempo real? Obrigado.
Bill
27

Shapely é um ótimo wrapper python em torno da popular biblioteca GEOS .

A. Coady
fonte
6
Parece estar muito focado no tratamento de dados GIS, ao invés de pura "geometria matemática" (por assim dizer)
Stefano Borini
2
Certamente foi criado para uso pela comunidade GIS, no entanto, é deliberadamente ignorante das projeções geográficas, o que o torna adequado para uso como uma biblioteca de geometria euclidiana de propósito geral. Eu o uso intensamente como tal em um projeto de jogo de computador nascente e ele funciona bem.
Jonathan Hartley,
15
o que diz sobre geometrias 3D: "Um terceiro valor de coordenada z pode ser usado ao construir instâncias, mas não tem efeito na análise geométrica. Todas as operações são realizadas no plano xy."
sebpiq
3
O comentário acima me levou cerca de meia hora de codificação para descobrir. Bastante agitado, na verdade.
meawoppl
2
Por que apenas um voto negativo quando a questão pede especificamente 3D?
Jamie Bull,
14

Eu descobri que o pyeuclídeo é um ótimo pacote de matemática euclidiana de propósito geral. Embora a biblioteca possa não conter exatamente os problemas que você mencionou, sua infraestrutura é boa o suficiente para tornar mais fácil escrevê-los por conta própria.

Dov Grobgeld
fonte
10

CGAL também tem vínculos Python .

Agnel Kurian
fonte
3
O último lançamento foi em 2009 e eles parecem estar incompletos. Alguém pode dizer que os usou recentemente e que pode fazer as coisas feitas na pergunta usando as ligações?
BenjaminGolder
Sim, todas as ligações que encontrei estão incompletas, incluindo algumas das guloseimas reais, como geometria sólida construtiva. Além disso, a natureza altamente modelada do CGAL torna difícil de embrulhar bem. Em um projeto meu ( Demakein ), estou usando o módulo cffi e alguns hacks horríveis para usar CGAL diretamente do python, usando snippets C ++ embutidos.
Paul Harrison
6

geometry-simple tem classes Point Line Plane Movement em ~ 300 linhas, usando apenas numpy; dê uma olhada.

Denis
fonte
6

Eu realmente quero uma boa resposta para essa pergunta, e as perguntas acima me deixaram insatisfeito. No entanto, acabei de encontrar o pythonocc que parece ótimo, além de não ter bons documentos e ainda ter alguns problemas com a instalação (ainda não é compatível com pypi). A última atualização foi há 4 dias (19 de junho de 2011). Ele envolve o OpenCascade, que tem uma tonelada de geometria e funcionalidade de modelagem. No site pythonocc:

pythonOCC é uma estrutura de desenvolvimento CAD / CAE / PLM 3D para a linguagem de programação Python. Ele oferece recursos como operações topológicas e geométricas avançadas, troca de dados (STEP, IGES, importação / exportação STL), malha 2D e 3D, simulação de corpo rígido, modelagem paramétrica.

[EDITAR: Agora baixei o pythonocc e comecei a trabalhar com alguns dos exemplos]

Eu acredito que ele pode realizar todas as tarefas mencionadas, mas achei seu uso não intuitivo. Ele é criado quase inteiramente a partir de wrappers SWIG e, como resultado, a introspecção dos comandos se torna difícil.

Benjamin Golder
fonte
Na minha opinião, é muito ... devemos começar um? Vou precisar de muitas operações de geometria em meu raytracer em breve, e provavelmente faz sentido criar um github separado para ele. Já tenho algum código, não começamos do zero, mas será fácil redesenhar se descobrirmos que não é bom o suficiente.
Stefano Borini
@Stefano Borini: claro! Terei todo o gosto em ajudar no que puder, mas não estou nem perto do seu nível de qualificação.
BenjaminGolder
Estou igualmente desapontado com o que está disponível. Para coisas simples, fiz meu próprio código (por exemplo, em Adolphus ), mas hoje à noite, por exemplo, preciso da interseção poliedro-poliedro e é apenas muitos passos do que eu tenho que estar são. Em qualquer caso, se isso acontecer, conte comigo.
ezod
este projeto nasceu?
Mermoz
1
@Mermoz sim, mas bem devagar. Stefano já começou na biblioteca e tenho escrito minhas próprias adições, mas não fomos muito longe. consulte github.com/stefanoborini/python-geometry e github.com/bengolder/python-geometry
BenjaminGolder
2

Você pode estar interessado no módulo Python SpaceFuncs do projeto OpenOpt, http://openopt.org

SpaceFuncs é uma ferramenta para modelagem geométrica 2D, 3D, N-dimensional com possibilidades de cálculos parametrizados, otimização numérica e solução de sistemas de equações geométricas

usuário871016
fonte
2

Python Wild Magic é outro código SWIG empacotado. No entanto, é uma biblioteca de jogos, mas você pode manipular o arquivo de biblioteca SWIG para excluir qualquer material gráfico indesejado da API Python.

Velimir Mlaker
fonte