Estou tentando encontrar uma maneira de converter um objeto sólido preenchido em milhões (mais ou menos) de linhas? por exemplo:
Posso usar qualquer ferramenta, mas o ideal é que eu queira saída no formato SVG (não é necessário)
Esta é uma solução parcial para o Inkscape. Outra resposta para o Illustrator mostra como é possível usar o efeito Rabisco de maneira não aleatória e obter o preenchimento em zigue-zague de linha reta desejado e o resultado precisa apenas de pequenas correções manuais (= lacuna é preenchida se a forma for complexa)
O Inkscape não tem esse efeito. Ele tem um efeito Path que gera preenchimentos de hachura grossa, mas o resultado é muito grosseiro. Em teoria, poderia fazer o mesmo que o Rabisco do Illustrator, mas simplesmente não possui a capacidade de ajuste e precisão necessárias.
O questionador deu um comentário em uma dica: existe uma extensão de terceiros por um fabricante de plotadora (= EggBot) que pode gerar alguns padrões de preenchimento semelhantes. Eu os pulo porque não os tenho. Tentei obtê-los, mas a instalação foi interrompida porque meu Inkscape não está instalado de maneira padrão.
Se sua forma for verticalmente simétrica, de modo que a metade superior possa ser apresentada nas coordenadas XY como Y = f (x), em que f é uma fórmula escrita com funções e operadores matemáticos do Python, você pode plotar o preenchimento em zigue-zague com a extensão Function Plotter do Inkscape. Como exemplo, verificamos seu círculo.
Devo trapacear um pouco, porque a fórmula exata para uma curva triangular em zigue-zague é complexa. Precisa de aritmética de módulo complicada. Não sei como escrevê-lo com as funções do Python. Um programador competente provavelmente poderia dizer isso em um segundo.
Mas o Python tem algumas coisas matemáticas elementares conhecidas como o seno, pi e squareroot. Eu os uso, porque a curva resultante pode ser convertida em linhas retas posteriormente.
A visualização com zoom alto mostra que na verdade é uma curva suave:
Para fazê-lo desenhar um quadrado e ir para Extensões> Render> Function Plotter. Eu selecionei o quadrado que apresenta x e y varia de -1 a +1.
A função é retirada da eletrônica. É seno modulado em amplitude (sem portadora!). A parte do envelope sqrt (1-x * x) é um semicírculo. O último número 40 define que há 40 ciclos completos da curva senoidal, isto é, 40 picos superior e inferior. Ele definiu o total de 161 nós no aproximado. Há um nó em cada cruzamento e pico zero.
Se você quiser mais, digamos 100 ciclos completos, altere 40 para 100 e 161 para 401.
Se alguém converte todos os nós em pontos de canto, ele obtém a forma triangular sem cálculos. Caminho de modificação da extensão> Achatar Bezier faz o trabalho. Aqui está um exemplo de achatamento:
Você deve aplicar o Flatten e, em seguida, selecione todos os nós da linha zero, exceto o mais à esquerda e o mais à direita com a ferramenta none e pressione DEL. Em seguida, aplainar novamente e pronto - apenas linhas retas, sem nós extras:
Salve-o como SVG simples para eliminar todas as partes do Inkscape (não deve haver nenhuma porque o resultado é um caminho, ele não possui funções).
Eu acho que o método de plotagem de funções não é prático, então eu tento outra coisa. Se linhas paralelas retas forem aceitas como preenchimento (= sem zigue-zague), é possível agrupar várias linhas e definir uma máscara de recorte ou dividir as linhas destrutivamente com uma forma
O Inkscape tem várias maneiras de criar várias linhas retas
O terceiro método é mais simples. Ele gera as linhas intermediárias como um grupo:
As linhas devem ser desagrupadas e combinadas (Caminho> Combinar) para mantê-las seguramente como um objeto. Os grupos são facilmente corrompidos porque seus membros ainda podem ser selecionados de forma independente. Além disso, muitas operações de caminho não funcionam com grupos, elas precisam de caminhos únicos ou caminhos combinados.
A próxima imagem mostra o resultado quando uma forma é colocada nas linhas e Objeto> Clipe> Conjunto é aplicado:
O recorte pode ser retirado a qualquer momento, as peças originais estão intactas, apenas parcialmente ocultas. Não há como encaixar nada no fim aparente da linha, porque não há nó. Para isso, as linhas devem ser divididas destrutivamente ou nenhum recorte deve ser feito. O encaixe na interseção do caminho funciona muito bem no Inkscape.
Podemos utilizar o snap desenhando o ziguezague triangular com a caneta:
O ziguezague azul é feito com a caneta clicando apenas em um clique por um ponto de passagem. Demorou cerca de um minuto. O ziguezague azul é um caminho único independente.
Se for perturbador o fato de metade dos segmentos de linha s serem verticais e a outra metade estar inclinada, ela será corrigida girando as linhas antes de desenhar o zigue-zague.
Surge uma pergunta "Se alguém dividir as linhas, por exemplo, com Path> Cut path, as peças podem ser combinadas de alguma maneira automaticamente, não uma por uma, em zigue-zague. Na teoria, SIM. Mas existem dificuldades que tornam o resultado inseguro.
Inicialmente, dividimos as linhas com a mesma curva preta. Uma forma superior realmente divide as linhas subjacentes se elas forem combinadas (Caminho> Combinar). Os remanescentes podem ser selecionados e removidos facilmente usando a ferramenta de seleção normal no modo "selecionar se for tocado" (= Alt + Arrastar):
Em seguida, podemos selecionar os nós da extremidade inferior de todas as linhas e tentar a função do nó Unir os nós selecionados. Infelizmente, o resultado é inesperado:
Todas as operações de conexão final de união de nós, quando agrupadas, selecionam o pedido imprevisivelmente. As conexões devem ser feitas uma a uma. É muito mais fácil desenhar o ziguezague com a caneta, como mostrado acima.
O efeito de rabisco do Illustrator faz muito o que você está pedindo
Basta aplicar rabisco no preenchimento do caminho. Em seguida, ajuste as configurações de rabisco para ter 0 variação.
Então, como esse é um efeito ao vivo, você precisa expandi-lo com Objeto → Expandir Aparência
Agora, o Scribble mede a distância entre os pontos de propagação um pouco diferente do seu exemplo. Isso pode ou não ser um problema, não sendo descrito com tanta precisão na configuração do problema.
fonte
Se você encontrar uma maneira de descrever matematicamente o envelope da sua forma, poderá multiplicar a função por
sin
um curto período. Para o exemplo do disco,sin(100*x) * sqrt(1 - x**2)
parece funcionar bem:Aqui está um exemplo ao vivo , no qual você pode alterar os parâmetros com controles deslizantes.
É possível plotar uma função como SVG no gnuplot , matplotlib ou neste site .
fonte