Я хочу створити зразок отвору динаміка таким чином:
Але я не впевнений, з чого почати. Чи можна цього досягти без трудомісткого позиціонування в Illustrator чи подібному програмному забезпеченні?
Я хочу створити зразок отвору динаміка таким чином:
Але я не впевнений, з чого почати. Чи можна цього досягти без трудомісткого позиціонування в Illustrator чи подібному програмному забезпеченні?
Відповіді:
Я додам свій метод, оскільки мені здається, що це найпростіший. В основному, ви:
Ось сценарій Python (вимагає svgwrite
і 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())
Він створить файл SVG в каталозі, в якому він знаходиться. Ви можете відкрити це в браузері:
Або в Illustrator:
Ви повинні використовувати більше вікна Illustrator, ніж я, хоча моє було трохи занадто мало, щоб зручно працювати з ним ...
Якщо ви не можете створити файли сценаріїв Python (можливо, це запущено в онлайн-інтерпретаторі Python), тоді просто коментуйте dwg.save()
. Останній рядок друкує вміст SVG на консолі, ви можете вставити його в Блокнот, а потім зберегти як my file.svg
.
Я захопився і додав кілька "акуратних" функцій, як-от:
Ви можете їх легко залишити, оскільки Illustrator не приховує об'єкти поза межами полотна та дозволяє змінити розмір полотна вручну:
Ви фактично не вказуєте, чи є зображення чимось, що ви створили самі в TK, під рукою чи ні. Якщо у вас вже є цей код, ви можете експортувати полотно програм TK у вигляді EPS та відкрити його в ілюстраторі. Все, що вам потрібно зробити - це зателефонувати canvas.postscript()
.
Простий зразок у 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()
У результаті виходить файл з назвою "patten.eps"
.
Зображення 1 : Відкриття сформованого EPS в ілюстраторі.
Це можна зробити у exteScript, SVG або безпосередньо, написавши програму EPS, все це легко зробити (див. Додаток нижче для деяких прикладів). Дивіться наступні публікації про ресурси:
PS : Я не знаю, чи варто сценаріїв, оскільки потрібно три хвилини, щоб залучити їх за допомогою інструмента обертання та Ctrl+D
Зображення 2 : Одне кільце із способом, наведеним вище
%!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);
}
Ви можете швидко зробити щось подібне до вашого прикладу в Illustrator, використовуючи штриховий штрих. Щоб легко намалювати рівномірно розташовані кільця, я б скористався інструментом Polar Grid .
Тоді лише питання встановити обведення на кільцях пунктирними прогалинами, які відповідають вашим уподобанням:
Ви можете, звичайно, тонко налаштувати кожен рядок, щоб додати більше крапок, якщо потрібно, просто збільшити або зменшити значення окремого проміжку. Якщо активовано поле розриву, ви можете використовувати колесо прокрутки, щоб швидко змінити значення. Утримуйте Ctrl / Cmdклавішу прокрутки, щоб налаштувати більш точні кроки
Проблема з цим методом полягає в тому, що в деяких точках може бути перекриття:
Їх, можливо, потрібно буде вручну редагувати, якщо вам потрібно, щоб вони були ідеальними. На ряду повинно бути не більше 1 перекриттів.
Ефект спотворення та перетворення ілюстратора ідеально підходить для такого типу повторюваного шаблону, але для отримання такої точної схеми знадобиться певна настройка. Почніть з пунктирної лінії (з вашого прикладу 11 крапок)
Додайте ефект перетворення через Effect > Distort & Transform > Transform...
Ви помітите, що у внутрішніх рядах занадто багато крапок. Ось де підходить ручне налаштування, але це повинно зробити вас досить далеко, щоб зрозуміти решту.
Використовуйте Inkscape:
І результат (використовуючи 22,5 градусів, щоб відповідати образу ОП):