Chcę utworzyć wzór otworów głośników w ten sposób:
Ale nie jestem pewien, od czego zacząć. Czy można to osiągnąć bez pracochłonnego pozycjonowania w programie Illustrator lub podobnym oprogramowaniu?
Chcę utworzyć wzór otworów głośników w ten sposób:
Ale nie jestem pewien, od czego zacząć. Czy można to osiągnąć bez pracochłonnego pozycjonowania w programie Illustrator lub podobnym oprogramowaniu?
Odpowiedzi:
Dodam moją metodę, ponieważ wydaje mi się, że jest najprostsza. Zasadniczo:
Oto skrypt w języku Python (wymaga svgwrite
i 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())
Stworzy plik SVG w katalogu, w którym się znajduje. Możesz to otworzyć w przeglądarce:
Lub w programie Illustrator:
Powinieneś jednak użyć większego okna programu Illustrator niż moje, moje było jednak trochę za małe, aby wygodnie z nim pracować ...
Jeśli nie możesz mieć skryptów Pythona tworzących pliki (być może uruchamiających to w internetowym tłumaczu Pythona), po prostu skomentuj dwg.save()
. Ostatni wiersz wypisuje zawartość SVG na konsolę, możesz wkleić to do Notatnika, a następnie zapisać jako my file.svg
.
Dałem się ponieść emocjom i dodałem kilka „schludnych” funkcji, takich jak:
Możesz z łatwością je pominąć, ponieważ Illustrator nie ukrywa obiektów poza granicami obszaru roboczego i pozwala ręcznie zmienić rozmiar obszaru roboczego:
W rzeczywistości nie określasz, czy obraz jest czymś, co sam wygenerowałeś w TK, masz pod ręką, czy nie. Jeśli masz już ten kod, możesz wyeksportować płótno aplikacji TK jako EPS i otworzyć je w programie Illustrator. Wszystko, co musisz zrobić, to zadzwonić canvas.postscript()
.
Prosta próbka w 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()
Powoduje to utworzenie pliku o nazwie "patten.eps"
.
Zdjęcie 1 : Otwarcie wygenerowanego EPS w programie Illustrator.
Możesz to zrobić w rozszerzonym języku JavaScript, SVG lub bezpośrednio, pisząc program EPS, z których wszystkie są łatwe do wykonania (niektóre przykłady znajdują się w załączniku poniżej). Zobacz następujące posty dotyczące zasobów:
PS : Nie wiem, czy warto pisać skrypty, ponieważ ich przyciągnięcie zajmuje około 3 minut za pomocą narzędzia obracania i Ctrl+D
Zdjęcie 2 : Jeden pierścień z powyższą metodą
%!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);
}
Możesz szybko zrobić coś podobnego do przykładu w programie Illustrator, używając kreski przerywanej. Aby łatwo narysować równomiernie rozmieszczone pierścienie, użyłbym narzędzia Polar Grid Tool .
Następnie wystarczy ustawić obrys na pierścieniach, tak aby był przerywany szczelinami, które pasują do twoich upodobań:
Możesz oczywiście dostroić każdy wiersz, aby dodać więcej kropek, jeśli to konieczne, po prostu zwiększ lub zmniejsz wartość pojedynczej przerwy. Przy aktywnym polu odstępu możesz użyć kółka przewijania, aby szybko zmienić wartość. Przytrzymaj Ctrl / Cmdpodczas przewijania, aby dostosować w dokładniejszych krokach
Problem z tą metodą polega na tym, że niektóre kropki mogą się nakładać:
Mogą one wymagać ręcznej edycji, jeśli potrzebujesz, aby były idealne. Powinno być co najwyżej 1 zakładka na rząd.
Efekt zniekształcania i przekształcania programu Illustrator jest idealny dla tego rodzaju powtarzającego się wzoru, ale aby uzyskać ten dokładny wzór, trzeba będzie go trochę ulepszyć. Zacznij od linii kropkowanej (w twoim przykładzie 11 kropek)
Dodaj efekt przekształcenia za pomocą Effect > Distort & Transform > Transform...
Zauważysz, że wewnętrzne rzędy mają zbyt wiele kropek. W tym momencie pojawia się ręczne poprawianie, ale powinno to doprowadzić Cię na tyle daleko, aby dowiedzieć się o reszcie.
Użyj Inkscape:
Rezultat (użycie 22,5 stopni w celu dopasowania do obrazu OP):