Eu quero criar um padrão de orador como este:
Mas não sei por onde começar. Isso pode ser conseguido sem posicionamento trabalhoso no Illustrator ou em software semelhante?
Eu quero criar um padrão de orador como este:
Mas não sei por onde começar. Isso pode ser conseguido sem posicionamento trabalhoso no Illustrator ou em software semelhante?
Respostas:
Vou adicionar meu método, pois me parece que é o mais simples. Basicamente, você:
Aqui está o script Python (requer svgwrite
e math
):
"""
This script has two purposes:
- Simple demonstration of using Python (specifically the svgwrite library) to create an SVG file
- Answer the question http://graphicdesign.stackexchange.com/q/56200/21332
"""
# n[x] should give the number of circles at a distance of (x+1)*d from the center
d = 30
n = [8, 16, 20, 20, 20]
r = 7 # radius of each circle
# Calculate the center points of each circle
circles = [(0, 0)] # There is always one circle in the middle
import math
for i in range(0, len(n)):
m = n[i] # m is the number of circle in this "row", i is the number of the row
for j in range(0, m): # for each circle...
phi = 2*math.pi*j/m # Calculate the angle at which the circle will be
# Convert polar coordinates to cartesian
x = d*(i+1)*math.cos(phi)
y = d*(i+1)*math.sin(phi)
circles.append((x, y))
# Write circles to SVG
import svgwrite
# Determine correct size of drawing
width = max([c[0] for c in circles])*2.2
height = max([c[1] for c in circles])*2.2
dwg = svgwrite.Drawing('demo.svg', size = (width, height)) # output will be in the same folder as this script
# offsets for shifting all circles so that the SVG can be easily viewed in browser
x_offset = min([c[0] for c in circles])*1.1
y_offset = min([c[1] for c in circles])*1.1
for c in circles:
adjusted_x = c[0] - x_offset
adjusted_y = c[1] - y_offset
dwg.add(svgwrite.shapes.Circle((adjusted_x, adjusted_y), r))
# Save the file
dwg.save()
# Print SVG source to console
print(dwg.tostring())
Ele criará um arquivo SVG no diretório em que está. Você pode abrir isso em um navegador:
Ou no Illustrator:
Você deve usar uma janela maior do Illustrator do que eu, mas a minha era um pouco pequena demais para trabalhar confortavelmente ...
Se você não pode fazer com que os scripts Python criem arquivos (talvez executando isso em um interpretador Python on-line), basta comentar dwg.save()
. A última linha imprime o conteúdo do SVG no console; você pode colá-lo no bloco de notas e salvar como my file.svg
.
Eu me empolguei e adicionei alguns recursos "legais", como:
Você pode excluí-los facilmente, pois o Illustrator não oculta objetos fora dos limites da tela e permite redimensionar a tela manualmente:
Na verdade, você não especifica se a imagem é ou não algo que você gerou no TK, tem à mão ou não. Se você já possui esse código, pode exportar a tela dos aplicativos TK como EPS e abri-la no ilustrador. Tudo o que você precisa fazer é ligar canvas.postscript()
.
Amostra simples em python 2:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from Tkinter import *
import math
def circle(c, x, y, r=10):
return c.create_oval(x-r, y-r, x+r, y+r, width=0, fill="black")
def draw_circles(c, num, r):
step = (2.0*math.pi)/float(num)
for i in range(num):
x = 400 + r * math.sin(i*step)
y = 400 + r * math.cos(i*step)
circle(c, x, y)
main_window = Tk()
main_window.title('Pattern to EPS')
canvas = Canvas(main_window,
width=800, height=800,
bg = 'white')
circle(canvas, 400, 400)
for i in range(1, 6):
draw_circles(canvas, i*8, i*60)
canvas.pack()
# next line generates a eps file
canvas.postscript(file = "pattern.eps", width=800, height=800 )
# uncomment next line if you want to see the tk window
# main_window.mainloop()
Isso resulta em um arquivo chamado "patten.eps"
.
Imagem 1 : Abrindo o EPS gerado no ilustrador.
Você pode fazer isso em extendedScript, SVG ou diretamente escrevendo o programa EPS, que é fácil de executar (consulte o apêndice abaixo para ver alguns exemplos). Veja as seguintes postagens para obter recursos:
PS : Não sei se vale a pena criar scripts, pois leva cerca de 3 minutos para atraí-los com a ajuda da ferramenta de rotação e Ctrl+D
Imagem 2 : Um anel com o método acima
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 800 800
%%Title: pattern
%%Creator: joojaa
%%CreationDate: 2015-07-08
%%EndComments
/c {newpath 10 0 360 arc closepath fill} def
/cr {
dup 8 mul 2 dict begin /i exch def /r exch 60 mul def
1 1 i {360 i div mul dup sin exch cos r mul exch r mul c} for
end
} def
400 400 translate
0 0 c
1 1 6 {cr} for
%%EOF
#target illustrator
var doc = app.activeDocument;
function circle(x,y) {
doc.pathItems.ellipse(x+5,y-5,10,10);
}
function draw_circles(num, r){
var step = (2.0*Math.PI)/num;
for (var i = 0; i < num; i++) {
var x = -200 + r * Math.sin(i*step);
var y = 200 + r * Math.cos(i*step);
circle(x, y);
}
}
circle(-200,200);
for (var i = 1; i <= 6; i++) {
draw_circles(i*8, i*30);
}
Você pode criar rapidamente algo semelhante ao seu exemplo no Illustrator usando um traço tracejado. Para desenhar os anéis espaçados uniformemente com facilidade, eu usaria a ferramenta Polar Grid .
Então é só uma questão de definir o traço nos anéis para marcar com lacunas que se encaixam no seu gosto:
É claro que você pode ajustar cada linha para adicionar mais pontos, se necessário, apenas aumentar ou diminuir o valor do intervalo individual. Com a caixa de espaço ativa, você pode usar sua roda de rolagem para alterar rapidamente o valor. Mantenha Ctrl / Cmdpressionado enquanto rola para ajustar em incrementos mais finos
Um problema com esse método é que pode haver sobreposição em alguns dos pontos:
Esses podem precisar ser editados manualmente se você precisar deles para serem perfeitos. Deve haver no máximo 1 sobreposição por linha.
O efeito de distorção e transformação do Illustrator é perfeito para esse tipo de padrão de repetição, mas para obter esse padrão exato, será necessário algum ajuste. Comece com uma linha pontilhada (com 11 pontos no seu exemplo)
Adicionar um efeito de transformação via Effect > Distort & Transform > Transform...
Você notará que as linhas internas têm muitos pontos. É aí que entra o ajuste manual, mas isso deve levá-lo longe o suficiente para descobrir o resto.
Use o Inkscape:
E o resultado (usando 22,5 graus para corresponder à imagem do OP):