Mais

Usando geometria de recurso Z e M para criar gráfico de linha em ArcPy / Python?

Usando geometria de recurso Z e M para criar gráfico de linha em ArcPy / Python?


Eu sou um Python (v2.6.5) noob tentando plotar uma série de polilinhas 3D em gráficos. Até agora eu descobri:

# Importar módulos do sistema, importar arcpy, os, sys, string de arcpy import env print "Módulos importados." # Definir configurações de ambiente arcpy.env.overwriteOutput = True arcpy.env.workspace = r "X:  HaulRoad  SpatialData" arcpy.env.scratchWorkspace = r "X:  HaulRoad  SpatialData" print "Espaços de trabalho definidos." # Set local variables infc = " HaulRd.gdb  Treatment  XS_2009BEBRklnTerr_interpZ_Rte_isect" graph_template = r " XS  XS_Seg02.55.grf" # template gráfico originalmente criado com a ferramenta de perfil 3d Analyst, personalizado em Propriedades Avançadas e exportado para o formato grf imprimir "Conjunto de variáveis ​​locais." #criar lista de campos de interesse do FC ou tabela de campos de interesse = ['SegID', 'STA_calc', 'shape.Z', 'shape.M'] #criar lista vazia para o cursor preencher lista = [] imprimir " Tabela e lista vazia criadas. " # use o cursor de pesquisa para obter o valor do campo para um determinado registro rows = arcpy.SearchCursor (infc, "", "", "SegID; STA_calc") para linha em linhas: list.append (row.SegID) list.append (row .STA_calc) del row, rows print "Linhas anexadas à tabela temporária. Lista excluída." #remove duplicatas da lista list = dict.fromkeys (list) list = list.keys () print "Duplicatas removidas." #criar uma variável de memória temporária memoryFC = "in_memory" + "" + "virtualFC" print "Recurso de memória criado." para n na lista: arcpy.TableSelect_analysis (infc, memoryFC, "STA_calc =" + str (n)) out_Seg = fields [0] out_STA = fields [1] out_graph_name = n out_graph_pdf = r " XS  Script  XS_chart_Seg" + str (out_Seg) + str (out_STA) + ".pdf" graph_data = memoryFC # Criar camada de feição temporária arcpy.MakeFeatureLayer_management (infc, "XS_lyr") # Criar o gráfico da camada de feição temporária graph = arcpy.Graph () # Especifique o title of the Graph graph.graphPropsGeneral.title = "Segment" + out_Seg # Especifique o subtítulo do gráfico graph.graphPropsGeneral.subtitle = "Station" + out_STA # Especifique o título do eixo esquerdo graph.graphAxis [0] .title = "Elevation (ft)" # Especifique o título do eixo inferior graph.graphAxis [2] .title = "Station (ft)" # Adicione uma série de barras verticais ao gráfico graph.addSeriesLineVertical ("XS_lyr", shape.Z, shape.M) # Produz um gráfico, que é criado na memória arcpy.MakeGraph_management (graph_template, graph, out_graph_name) # Salve o gráfico como um PDF arcpy.SaveGraph_management ( out_graph_name, out_graph_pdf, "MAINTAIN_ASPECT_RATIO", 800, 600) #clean in-memory arcpy.Delete_management ("in_memory") print "PDFs criados e memória limpa."

Recebo um erro na linha 82, onde estou adicionando a série de linhas verticais. Presumo que o problema é que estou tentando plotar valores com base na geometria do recurso, em oposição aos valores na tabela de atributos.

Isso é possível sem alguma conversão intermediária (por exemplo, converter vértices em pontos)?

Os dados de origem são uma classe de recurso de polilinha com valores Z e M em um geodatabase de arquivo Arc 10.0 SP4.


Minha intenção geral foi comunicada em um post anterior: Criando títulos de gráficos dinâmicos no ArcMap? Não tive sucesso em minhas tentativas de atuar de dentro do Arc.


A mensagem de erro que recebo no IDLE é a seguinte:
Traceback (última chamada mais recente): Arquivo "C: temp MakeGraphTest_v100_20140616.py", linha 82, em graph.addSeriesLineVertical ("XS_lyr", shape.Z, shape.M) NameError: nome 'forma' não está definido


shape.Z e shape.M não são campos, são propriedades do campo de forma. Se você quiser plotar Z e M, você deve exportá-los para novos campos e usar os novos campos emarcpy.graph.addSeriesLineVertical.


Boa biblioteca de geometria em python? [fechado]

Quer melhorar esta questão? Atualize a pergunta para que fique no tópico do Stack Overflow.

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 ter 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.


Propiedades

Retorna uma representação JSON da geometria como uma string.

A string retornada pode ser convertida em um dicionário usando a função json.loads do Python.

Retorna a representação binária reconhecida (WKB) para a geometria OGC. Ele fornece uma representação portátil de um valor de geometria como um fluxo contíguo de bytes.

Retorna a representação de texto conhecido (WKT) para a geometria OGC. Ele fornece uma representação portátil de um valor geométrico como uma string de texto.

A área de um recurso poligonal. Vazio para todos os outros tipos de recursos.

O verdadeiro centróide se estiver dentro ou no recurso, caso contrário, o ponto do rótulo é retornado. Retorna um objeto de ponto.

A extensão da geometria.

O primeiro ponto de coordenada da geometria.

Uma string delimitada por espaço dos pares de coordenadas do retângulo de casca convexa.

Verdadeiro, se o número de peças para esta geometria for mais de um.

O ponto em que o rótulo está localizado. O labelPoint está sempre localizado dentro ou em um recurso.

A última coordenada do recurso.

O comprimento do recurso linear. Zero para tipos de recursos de ponto e multiponto.

O comprimento 3D do recurso linear. Zero para tipos de recursos de ponto e multiponto.

O número de peças de geometria para o recurso.

O número total de pontos do recurso.

A referência espacial da geometria.

O centro de gravidade de um recurso.

O tipo de geometria: polígono, polilinha, ponto, multiponto, multipatch, dimensão ou anotação.


Methodenübersicht

Constrói o limite da geometria.

Constrói um polígono a uma distância especificada da geometria.

Constrói a interseção da geometria e a extensão especificada.

Gibt an, ob die Basisgeometrie die Vergleichsgeometrie enthält.

contém ist das Gegenteil von.

Apenas relacionamentos verdadeiros são mostrados nesta ilustração.

Constrói a geometria que é o polígono delimitador mínimo de forma que todos os ângulos externos sejam convexos.

Gibt an, ob die beiden Geometrien sich in einer Geometrie mit einem geringeren Shape-Typ überschneiden.

Zwei Polylinien kreuzen sich, wenn sie nur Punkte gemeinsam haben, von denen mindestens einer kein Endpunkt ist. Eine Polylinie und ein Polygon kreuzen sich, wenn sie im Inneren des Polygons eine Polylinie oder einen Punkt (für eine vertikale Linie) gemeinsam haben, die bzw. der nicht der gesamten Polylinie entspricht.

Apenas relacionamentos verdadeiros são mostrados nesta ilustração.

Divide esta geometria em uma parte à esquerda da polilinha de corte e uma parte à direita dela.

Quando uma polilinha ou polígono é cortado, ele é dividido onde cruza a polilinha do cortador. Cada peça é classificada como esquerda ou direita do cortador. Esta classificação é baseada na orientação da linha de corte. As partes da polilinha de destino que não interceptam a polilinha de corte são retornadas como parte da direita do resultado para essa polilinha de entrada. Se uma geometria não for cortada, a geometria esquerda ficará vazia (nenhuma).

Constrói a geometria que é composta apenas pela região exclusiva da geometria base, mas não faz parte da outra geometria. A ilustração a seguir mostra os resultados quando o polígono vermelho é a geometria de origem.

Gibt an, ob die Basis- und die Vergleichsgeometrie keine gemeinsamen Punkte aufweisen.

Zwei Geometrien überschneiden sich, wenn disjoint den Wert False zurückgibt.

Apenas relacionamentos verdadeiros são mostrados nesta ilustração.

Retorna a distância mínima entre duas geometrias. Se as geometrias se cruzam, a distância mínima é 0.

Ambas as geometrias devem ter a mesma projeção.

Indica se as geometrias de base e de comparação são do mesmo tipo de forma e definem o mesmo conjunto de pontos no plano. Esta é uma comparação 2D, apenas os valores M e Z são ignorados.

Apenas relacionamentos verdadeiros são mostrados nesta ilustração.

Retorna a área do recurso usando um tipo de medida.

Retorna o comprimento do recurso usando um tipo de medida.

Retorna uma matriz de objetos de ponto para uma parte específica da geometria ou uma matriz contendo várias matrizes, uma para cada parte.

Constrói uma geometria que é a interseção geométrica das duas geometrias de entrada. Diferentes valores de dimensão podem ser usados ​​para criar diferentes tipos de forma.

A interseção de duas geometrias do mesmo tipo de forma é uma geometria que contém apenas as regiões de sobreposição entre as geometrias originais.

Para resultados mais rápidos, teste se as duas geometrias são disjuntas antes de chamar a intersecção.

Retorna uma medida do ponto inicial desta linha até o ponto_in.

Gibt an, üb die Überschneidung der beiden Geometrien denselben Forma-Typ wie eine der Eingabegeometrien aufweist, aber keiner der Eingabegeometrien entspricht.

Apenas relacionamentos verdadeiros são mostrados nesta ilustração.

Retorna um ponto em uma linha a uma distância especificada do início da linha.

Projeta uma geometria e, opcionalmente, aplica uma geotransformação.

Para projetar, a geometria precisa ter uma referência espacial e não ter um UnknownCoordinateSystem. O novo sistema de referência espacial passado para o método define o sistema de coordenadas de saída. Se qualquer uma das referências espaciais for desconhecida, as coordenadas não serão alteradas. Os valores Z- e medidos não são alterados pelo método ProjectAs.

Encontra o ponto na polilinha mais próximo do in_point e a distância entre esses pontos. Também retorna informações sobre o lado da linha em que o ponto_in está, bem como a distância ao longo da linha onde ocorre o ponto mais próximo.

Retorna um novo ponto com base no ponto_in encaixado nesta geometria.

Constrói a geometria que é a união de duas geometrias menos a interseção dessas geometrias.

As duas geometrias de entrada devem ser do mesmo tipo de forma.

Gibt an, ob sich die Grenzen der Geometrien überschneiden.

Zwei Geometrien berühren sich, wenn die Schnittmenge der Geometrien nicht leer, die Schnittmengen der Innenbereiche jedoch leer ist. Ein Punkt berührt beispielsweise eine Polylinie nur, wenn der Punkt lagegleich mit einem der Endpunkte der Polylinie ist.

Apenas relacionamentos verdadeiros são mostrados nesta ilustração.

Constrói a geometria que é a união teórica dos conjuntos das geometrias de entrada.

As duas geometrias sendo unidas devem ter o mesmo tipo de forma.

Gibt an, ob sich die Basisgeometrie innerhalb der Vergleichsgeometrie befindet.

Der dentro de -Operator stellt das Gegenteil von contém dar.

Apenas relacionamentos verdadeiros são mostrados nesta ilustração.


à sua figura TikZ. Você receberá isto:

Não entendo por que você precisa / quer usar essas propriedades de eixo apenas para fazer essa imagem, então tive que propor uma resposta mais simples, usando ângulos, bibliotecas de citações. Com esta solução, você não precisa de nenhum cálculo próprio, apenas coloque nós e desenhe o ângulo entre eles.

Você também pode fazer isso usando a biblioteca tkz-euclide.

Observe que você pode alterar as propriedades do ângulo (se não quiser que seja preenchido, etc.)


Planaridade do gráfico e método de adição de caminho de Hopcroft-Tarjan para teste de planaridade

Gráficos planos desempenham um papel central em muitos problemas em geometria computacional. A determinação do isomorfismo de estruturas químicas é simplificada se as estruturas forem planas. Outro exemplo é quando um engenheiro deseja incorporar uma rede de componentes em um chip. Os componentes são representados por fios, e dois fios não podem se cruzar sem criar um curto-circuito. Esse problema pode ser resolvido tratando a rede como um gráfico e encontrando uma incorporação planar dela.

Abaixo estão alguns conceitos básicos necessários. Um gráfico G = (V, E) é planar se for possível desenhá-lo em um plano de modo que nenhuma aresta se cruze, exceto nos pontos finais. Esse desenho é chamado de incorporação planar. Um exemplo de gráfico planar é K4, o gráfico completo de 4 vértices (Figura 1).

Nem todos os gráficos são planos. A Figura 2 dá exemplos de dois gráficos que não são planos. Eles são conhecidos como K5, o gráfico completo em cinco vértices, e K_, o grafo bipartido completo em dois conjuntos de tamanho 3. Não importa que tipo de curvas convolutas sejam escolhidas para representar as arestas, a tentativa de incorporá-las sempre falha quando a última das arestas não pode ser inserida sem cruzar sobre alguma outra aresta, conforme ilustrado na figura.

Uma sequência de arestas consecutivas que se conectam você e v é chamado de caminho do G a partir de você para v. Um caminho é simple se todos os seus vértices forem distintos. Um caminho de um vértice até ele mesmo é um caminho fechado. Um caminho fechado de v para v com uma ou mais arestas é um ciclo se todas as suas arestas são distintas e o único vértice a aparecer duas vezes é v. Nós usamos p: você* v para denotar que p é um caminho de você para v em G.

Uma árvore (direcionada, enraizada) T é um gráfico direcionado com uma raiz r, de modo que cada vértice em T é acessível a partir de r, nenhuma aresta entra r, e exatamente uma aresta entra em todos os outros vértices em T. A relação "(v, w) é uma aresta em T ” é denotado por vC. A relação "há um caminho de v para w em T'' É denotado por v* C. Se vC, v é o pai do C e C é um filho do v. Se v* C, v é um antepassado do C e C é um descendente do v. Cada vértice é um ancestral e um descendente de si mesmo. Se G é um gráfico direcionado, uma árvore T é um árvore geradora do G E se T é um subgrafo de G que contém todos os vértices de G.

UMA subdivisão de uma borda (x, y) de um gráfico é obtido criando um novo nó z, e substituindo (x, y) com novas arestas (x, z) e (z, y). UMA subdivisão de um gráfico é qualquer gráfico que possa ser obtido a partir dele por uma sequência de operações de subdivisão.

Desde K5 e K_ não são planos, é óbvio que as subdivisões desses gráficos também são não planos. Portanto, um gráfico que possui um subgráfico que é uma subdivisão de K5 ou K_ como um subgráfico deve ser não plano. Tal subgrafo é dito ser homeomórfico para um K_ ou a K5. Um resultado famoso na teoria dos grafos é o teorema de Kuratowski, que afirma que a ausência de uma subdivisão de um K5 ou um K_ também é suficiente para um gráfico ser plano.

Em geral, os algoritmos de gráfico requerem uma maneira sistemática de explorar um gráfico. A técnica mais importante e comum usada pelos algoritmos de teste de planaridade é o Profundidade primeira pesquisa.

Profundidade primeira pesquisa (DFS) é um método para visitar todos os vértices de um gráfico G de uma forma específica. Começa a partir de um vértice escolhido arbitrariamente de G como um nó raiz, e continua se movendo do vértice atual para um vizinho adjacente inexplorado. Quando o vértice atual não tem vértices adjacentes inexplorados, a travessia retrocede até o primeiro vértice com vértices adjacentes inexplorados. Veja nas figuras abaixo um exemplo de DFS.

As bordas usadas pelo DFS para alcançar os vértices de G formar uma árvore geradora T do G, chamado Palmeira, ou Árvore DFS. Portanto, a pesquisa de alguma forma converte G em um gráfico direcionado. A raiz de T é o vértice a partir do qual a visita é iniciada. As bordas de T são chamados bordas de árvore, enquanto as bordas restantes de G são chamados bordas traseiras e são denotados por uma curva tracejada na palmeira. A primeira pesquisa em profundidade é importante porque a estrutura dos caminhos em uma palmeira é muito simples.

Um gráfico não direcionado G é conectado se, para cada par de vértices você e v, G contém um caminho de você para v. UMA componente conectado de um gráfico é um subgráfico conectado máximo.

Um vértice de articulação em um gráfico é um vértice cuja exclusão desconecta o gráfico. Um gráfico é bicconectado se não tem vértice de articulação. UMA componente biconnected de um gráfico é um subgráfico máximo bicconectado.

Subgrafo de Kuratowski é um subgrafo que tem uma subdivisão de K5 ou K_ <3, 3>.

Teorema de Kuratowski (Kuratowski [Ku30]) Um grafo finito é planar se e somente se não contiver o subgrafo de Kuratowski.

Uma prova desse teorema por Dirac e Schuster (1954) pode ser encontrada em [BM76]. A prova é bastante longa, na qual os dois lemas principais e a prova principal do teorema usaram contradição. Outra prova de que usar indução no número de vértices se deve a Thomassen (1980) [GT87]. Embora esta prova não seja a mais curta ou fácil, é muito esclarecedora, pois também produz outros resultados sobre embeddings planares. Um dos resultados é o teorema de Fary de que as arestas de uma incorporação planar de um gráfico simplicial podem ser escolhidas como linhas retas (outros são o teorema de Tutte e o teorema de Whitney) Além disso, a prova de Thomassen é prontamente convertida em um algoritmo de planaridade que é polinomial no número de vértices.

Algoritmo ingênuo para teste de planaridade

Alguém pode se perguntar se o teorema elegante acima de Kuratowski poderia ser usado como um critério para testar a planaridade do gráfico de uma forma ingênua. A resposta é sim, e o algoritmo ingênuo baseado neste teorema tem tempo de execução exponencial, conforme ilustrado abaixo.

O grau ou valência de um vértice é o número de arestas incidentes desse vértice. Deixar você ser um vértice de grau 2 em um gráfico G = (V, E), e deixar e1 e e2 ser o incidente de bordas em você, dizer e1 = (u, v), e2 = (u, w). O gráfico obtido por “suavização em você”Tem como seu conjunto de vértices V/ e por seu conjunto de bordas E/ mais uma nova borda entre v e C. Subdividir esta nova aresta inverteria a operação de suavização em você. Então temos o seguinte resultado, que é uma consequência de Teorema de Kuratowski:

Deixar G seja um gráfico. Para cada subconjunto de E cuja remoção deixa apenas um componente não trivial H, construa o “gráfico de suavização” H ^ suavizando sucessivamente cada vértice de valência 2 em H, exceto possivelmente para um último vértice se H é um ciclo. Se algum H ^ é isomórfico a K5 ou K_ então o gráfico é não plano, caso contrário, G é plano.

Uma vez que existem 2 ^ subconjuntos de arestas a serem considerados, este algoritmo ingênuo tem tempo de execução exponencial.

Algoritmo de adição de caminho de Hopcroft e Tarjan

A melhor abordagem para o problema de planaridade parece ser uma tentativa de construir uma representação de um embedding plano do grafo dado. Se essa apresentação puder ser concluída, o gráfico será plano, caso contrário, o gráfico não será plano. Um desses algoritmos é o método de adição de caminho de Hopcroft e Tarjan [HT74]. Eles foram os primeiros a mostrar que o teste de planaridade pode ser feito em tempo linear.

Antes de dar o esboço do algoritmo, poderíamos fazer algumas observações a fim de restringir a classe do grafo considerado G. É óbvio que um gráfico é plano se e somente se todos os seus componentes conectados forem planos. Assim, podemos assumir que G está conectado.

Um gráfico é plano se e somente se todos os seus componentes bicconectados são planos ([Be64]). Além disso, os vértices de articulação podem ser encontrados em tempo linear ([HT73], [Ta72]), então é suficiente embutir cada componente biconnected separadamente, e então conectá-los por seus vértices de articulação adjacentes. Portanto, podemos assumir que G é bicconectado.

O seguinte resultado é o conhecido teorema de Euler:

(Euler 1750) Let G seja um gráfico planar conectado, e deixe n, m, f denotam respectivamente o número de vértices, arestas e faces de G. Então n-m + f = 2.

Este teorema pode ser provado por indução no número de arestas m. O que precisamos é o seguinte corolário:

Se G é um gráfico plano com n (≥ 3) vértices e m bordas, então m ≤ 3n - 6.

Agora estamos prontos para dar o esboço do método de adição de caminho.

Esboço de algoritmo

  • Conte o número de arestas, se | E | & gt 3 | V | - 6 então é não planar (usando o corolário acima para se livrar de gráficos com muitas arestas).
  • Aplique o DFS, convertendo o gráfico em uma palmeira T e numerando os vértices.
  • Encontre um ciclo na árvore e exclua-o, deixando um conjunto de peças desconectadas (Use Auslander, Parter, algoritmo de Goldstein, [AP61], [Go63]).
  • Verifique a planaridade de cada peça mais o ciclo original (aplicando o algoritmo recursivamente).
  • Determina se os embeddings das peças podem ser combinados para fornecer um embedding de todo o gráfico.

Cada chamada recursiva no algoritmo requer encontrar um ciclo e adicionar a ele um caminho simples de cada vez. Cada um desses novos caminhos conecta dois vértices antigos por meio de novas arestas e vértices (peças inteiras às vezes são invertidas, em torno de alguma linha para fazer isso, precisamos usar um corolário do conhecido Teorema da Curva de Jordan: uma curva fechada simples divide o plano em exatamente duas regiões conectadas). Isso explica o nome de “método de adição de caminho”. Isso também explica o importante uso de DFS para dividir o gráfico em caminhos simples que podem ser montados nos ciclos necessários para o teste de planaridade. Vou pegar o exemplo do gráfico G e DFS árvore T da figura 3 acima para ilustração.

Agora considere o primeiro ciclo c. Consistirá em uma sequência de arestas de árvores seguidas por uma aresta posterior em T. A numeração dos vértices é tal que os vértices estão ordenados por número ao longo do ciclo. Então, neste exemplo, o ciclo c é 1234581. Quando c é removido, G cai em várias peças conectadas. Cada peça que não faz parte do ciclo consistirá em uma única borda posterior (v, w) (pedaço s1 neste exemplo), ou da borda de uma árvore (v, w) mais uma subárvore com raiz C, além de todas as bordas traseiras que conduzem da subárvore (peça s2 nesse caso). Cada peça pode ir "dentro" ou "fora" c pelo Teorema da Curva de Jordan. Quando adicionamos uma peça, certas outras peças devem ser movidas ou "viradas" de dentro para fora ou vice-versa, se necessário (para manter a planaridade) até que uma peça não possa ser adicionada ou todo o gráfico seja incorporado ao plano . Este exemplo não mostra a caixa "invertida", mas pode-se consultar a Figura 4 e 5 no artigo para ilustração. Uma modificação de DFS ajudará a gerar uma ordem de caminhos de forma que todos os caminhos em uma peça sejam gerados antes dos caminhos em qualquer outra peça (s1 tem um caminho e s2 tem três caminhos neste caso), e as peças são exploradas em ordem decrescente de v Onde v é o ponto de partida do caminho acima.

Uma peça deve ser totalmente embutida em um lado do c pelo Teorema da Curva de Jordan. Para incorporar um segmento (digamos s2), encontramos um caminho p iniciar. Nós escolhemos um lado, digamos o esquerdo, no qual incorporar p. Nós comparamos p com bordas traseiras previamente incorporadas para determinar se p pode ser incorporado. Caso contrário, movemos peças que têm bordas traseiras bloqueando p da esquerda para a direita. Se p pode ser incorporado após mover as peças, nós o incorporamos. No entanto, se movermos as peças da esquerda para a direita, podemos ter que mover outras peças da direita para a esquerda. Assim, pode ser impossível incorporar p. Nesse caso, declaramos o gráfico não plano. Se p pode ser incorporado, tentamos incorporar o resto da peça (s2) usando o algoritmo recursivamente. Em seguida, tentamos incorporar a próxima peça. Neste exemplo, a peça s2 precisa ser transformado em peça s2 e # x27 conforme mostrado na Figura 5.

Embora o funcionamento interno do algoritmo seja baseado na busca por uma representação plana do grafo de entrada, não foi descrito como realmente produzir uma incorporação plana do mesmo. Vinte anos depois, Mehlhorn e Mutzel preencheram a lacuna, descrevendo como coletar, durante a fase de teste, as informações necessárias para construir a incorporação planar que foi implicitamente usada para mostrar a planaridade [MM96].

Gráficos planos e testes de planaridade desempenham um papel essencial em vários problemas em geometria computacional, incluindo sistemas de informações geográficas e localização de pontos. Por exemplo, o projeto de circuitos integrados requer saber quando um circuito pode ser embutido em um plano.

Em 1974, Hopcroft e Tarjan [HT74] propuseram o primeiro algoritmo de teste de planaridade no tempo linear. Esse algoritmo, também chamado de algoritmo de adição de caminho, começa a partir de um ciclo e adiciona a ele um caminho de cada vez. No entanto, o algoritmo é tão complexo e difícil de implementar que várias outras contribuições seguiram seu avanço. Por exemplo, cerca de vinte anos após [HT74], Mehlhorn e Mutzel [MM96] contribuíram com um artigo para esclarecer como construir a incorporação de um gráfico que é considerado plano pelo algoritmo Hopcroft e Tarjan original.

[AP61] Auslander, L., e Parter, S. V., Sobre a incorporação de gráficos no plano, J. Math. e Mech. 10, 517–523, 1961.

[Be64] Berge, C., A Teoria dos Gráficos e suas Aplicações, Alision Doig. Methuen, Londres, 1964.

[BM76] J. A. Bondy, U. S. R. Murty, Teoria de grafos com aplicativos, North-Holland, 1982.

[Go63] Goldstein, A. J., Um algoritmo eficiente e construtivo para testar se um gráfico pode ser incorporado em um plano, Graph and Combinatorics Conf., Contrato No. NONR 1858- (21), 1963.

[GT87] Jonathan L. Gross, Thomas W. Tucker, Teoria dos Grafos Topológicos, Wiley-Interscience, 1987.

[HT73] Hopcroft, J. e Tarjan, R., Algoritmos eficientes para manipulação de gráficos, Comm. ACM 16, 372-378, 1973.

[HT74] Hopcroft, John Tarjan, Robert E., Teste de planaridade eficiente, Journal of the Association for Computing Machinery 21 (4): 549–568, 1974.

[Ku30] Kuratowski, C., Sur le probleme des corbes gauches en topologie, Fundamenta Mathematicae 15, 271–283, 1930.

[MM96] Kurt Mehlhorn e Petra Mutzel., Na fase de incorporação do algoritmo de teste de planaridade de Hopcroft e Tarjan., Algorithmica, 16: 233–242, 1996.

[Ta72] Tarjan, R., Pesquisa de profundidade e algoritmos de gráfico linear, SIAM J. Comput. 1, 2 146–159, 1972.


Segmentação semântica de construção 3D baseada em gráficos para análise de sustentabilidade

Um método baseado em gráficos é proposto para segmentar os modelos de construção 3D em componentes semanticamente independentes. Para cada construção, primeiro criamos um gráfico (N, E) no qual os nós N representam a superfície do modelo de construção 3D e as arestas E padrão para as linhas compartilhadas entre dois nós de superfície. Em seguida, o gráfico é simplificado agregando as superfícies coplanares conectadas. Em seguida, os pontos de articulação do gráfico simplificado são detectados e removidos literalmente para segmentar o gráfico em componentes biconectados. Os atributos semânticos de cada componente são detectados de acordo com suas características de geometria e relação espacial com os demais. Por fim, os componentes do edifício com informações semânticas e geométricas são usados ​​para simular o processo de sustentabilidade da cidade, como o consumo de energia. De acordo com os resultados experimentais, o método proposto pode efetivamente extrair os dados semânticos dos modelos de construção LoD3 / LoD2 para ferramentas de simulação de sustentabilidade como o EnergyPlus.


Palavras-chave

Xu Yang nasceu na China em 1995. Atualmente está trabalhando para o doutorado. Licenciado no Departamento de Ciência e Tecnologia da Computação, Universidade de Mineração e Tecnologia da China, Xuzhou, China, onde está pesquisando os sistemas de medição distribuídos, big data e redes de sensores.

Qiang Zhu está atualmente trabalhando para obter o título de M.D. no Departamento de Ciência e Tecnologia da Computação, Universidade de Mineração e Tecnologia da China, Xuzhou, China, onde está pesquisando a localização interna e redes de sensores.

Peihao Li nasceu na China em 1994. Atualmente, ele está fazendo mestrado no Departamento de Ciência da Computação e Tecnologia da Universidade de Mineração e Tecnologia da China, Xuzhou, China, onde está pesquisando localização interna e redes de sensores.

Pengpeng Chen nasceu na China em 1983. Ele recebeu o Ph.D. graduado em 2011 pelo Departamento de Ciência da Computação e Tecnologia da Ocean University of China, Qingdao, China. Atualmente é professor do Departamento de Ciência e Tecnologia da Computação, Universidade de Mineração e Tecnologia da China, Xuzhou, China. Seus principais interesses de pesquisa são redes de sensores, sistemas de medição distribuídos, redes de observação oceânica e modelagem de dados. Ele publicou mais de 20 artigos acadêmicos em importantes periódicos acadêmicos no país e no exterior. Ele presidiu a National Natural Science Foundation, a China Postdoctoral Science Foundation, o State Key Laboratory Open Fund e outros projetos.

Qiang Niu nasceu em 1974 na China. Ele recebeu o Ph.D. diploma do Departamento de Ciência e Tecnologia da Computação, Universidade de Mineração e Tecnologia da China, Xuzhou, China. Atualmente é professor e reitor associado do Departamento de Ciência e Tecnologia da Computação, Universidade de Mineração e Tecnologia da China, Xuzhou, China. Ele também é vice-diretor do Centro de Pesquisa de Engenharia de Informações sobre Minas na Indústria de Carvão da China. Seus principais interesses de pesquisa são processamento inteligente de informações, inteligência artificial e reconhecimento de padrões, aprendizado de máquina e mineração de dados e outros aspectos da pesquisa. Ele publicou mais de 20 artigos acadêmicos recuperados pela SCI.


Quais programas de software são usados ​​para desenhar diagramas físicos e quais são seus méritos relativos?

Sem dúvida, as pessoas usam uma variedade de programas para desenhar diagramas para a física, mas não estou familiarizado com muitos deles. Eu normalmente desenho coisas à mão no GIMP, o que é poderoso em alguns aspectos, mas é demorado fazer coisas como desenhar círculos ou setas porque eu os faço com ferramentas mais primitivas. Também é difícil ser preciso.

Eu sei que algumas pessoas usam LaTeX, mas não tenho certeza de quão versátil ou fácil é. As únicas outras ferramentas que conheço são o Microsoft Paint e as ferramentas integradas ao Microsoft Office.

Então, quais ferramentas são comumente usadas pelos físicos? Quais são seus pontos positivos e negativos (recursos, facilidade de uso, portabilidade, etc.)?

Estou procurando uma ferramenta com alta flexibilidade e mínima curva de aprendizado / tempo de desenvolvimento. Embora eu queira desenhar e arrastar e soltar formas pré-fabricadas à mão, também quero especificar os locais exatos das curvas e formas com equações quando preciso de melhor precisão. Além disso, a funcionalidade de programação mínima seria um bom recurso adicional (ou seja, a capacidade de executar um loop que desenha uma série de linhas com um parâmetro variável).

Por favor, recomende alguns softwares se eles forem adequados para diferentes situações.


    Fazer diagramas (incluindo plotagem de função) pode ser realizado usando PSTricks (recomendado porque é mais rápido e fácil de aprender, mas poderoso) ou TikZ ou outros. O código acima é escrito em PSTricks, você precisa carregar usepackage .

Defina uma tela na qual você desenha.

(-4,25, -1,25) representa o ponto inferior esquerdo de sua tela e (4,25,2,25) é o ponto superior direito.

Defina a função a ser traçada.

Neste exemplo, escolhi y = sin (2x) +1/2.

Em PSTricks, podemos especificar um ponto de várias maneiras. (* & ltx-value & gt ) é um deles. Assim, (* 1 < f (x) +0,5>) significa matematicamente um ponto (x, y) onde x = 1 ey = f (1) +0,5.

Compile o arquivo de entrada com xelatex ou a seqüência de combinação latex-dvips-ps2pdf.


Assista o vídeo: Python: Map Automation in ArcGIS Pro