Bunun gibi bir hoparlör deliği deseni oluşturmak istiyorum:
Ama nereden başlayacağımdan emin değilim. Bu, Illustrator veya benzeri bir yazılımda zahmetli bir konumlandırma olmadan gerçekleştirilebilir mi?
Bunun gibi bir hoparlör deliği deseni oluşturmak istiyorum:
Ama nereden başlayacağımdan emin değilim. Bu, Illustrator veya benzeri bir yazılımda zahmetli bir konumlandırma olmadan gerçekleştirilebilir mi?
Yanıtlar:
Metodumu ekleyeceğim, çünkü bana en basitmiş gibi geliyor. Temel olarak:
İşte Python betiği (gerektirir svgwrite
ve 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())
İçinde bulunduğu dizinde bir SVG dosyası oluşturur. Bunu bir tarayıcıda açabilirsiniz:
Veya Illustrator'da:
Benden daha büyük bir Illustrator penceresi kullanmalısın, ancak benimki rahatça çalışmak için biraz fazla küçüktü ...
Python betiklerinin dosya oluşturmasını sağlayamıyorsanız (belki de bunu çevrimiçi bir Python yorumlayıcısında çalıştırıyorsanız) yorum yapın dwg.save()
. Son satır SVG'nin içeriğini konsola yazdırır, bunu Not Defteri'ne yapıştırabilir ve sonra olarak kaydedebilirsiniz my file.svg
.
Ben taşındı ve gibi birkaç "temiz" özellikleri ekledi:
Illustrator, tuval sınırları dışındaki nesneleri gizlemediği ve tuvali manuel olarak yeniden boyutlandırmanıza izin verdiği için bunları kolayca bırakabilirsiniz:
Görüntünün TK'de kendiniz oluşturduğunuz, elinizde olup olmadığı bir şey olup olmadığını gerçekten belirtmezsiniz. Bu kod zaten varsa, TK uygulamaları tuvalini EPS olarak dışa aktarabilir ve illustrator'da açabilirsiniz. Tek yapmanız gereken aramak canvas.postscript()
.
Python 2'de basit örnek:
#!/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()
Bu, adlı bir dosya ile sonuçlanır "patten.eps"
.
Resim 1 : Oluşturulan EPS'yi illustrator uygulamasında açma.
Bunu extScript, SVG'de veya doğrudan yapılması kolay olan EPS programını yazarak yapabilirsiniz (bazı örnekler için aşağıdaki eke bakın). Kaynaklar için aşağıdaki gönderilere bakın:
Not : Döndürme aracı ve Ctrl+D
Resim 2 : Yukarıdaki yöntemle bir halka
%!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);
}
Kesikli bir kontur kullanarak Illustrator'da örneğinize benzer bir şey hızlı bir şekilde yapabilirsiniz. Eşit aralıklı halkaları kolayca çizmek için Polar Izgara Aracını kullanırdım .
O zaman sadece halkalardaki Kontur'u beğeninize uyan boşluklarla kesik bir şekilde ayarlamak meselesidir:
Gerekirse daha fazla nokta eklemek için elbette her satıra ince ayar yapabilirsiniz, tek tek boşluk değerini artırın veya azaltın. Boşluk kutusu etkinken, değeri hızlı bir şekilde değiştirmek için kaydırma tekerleğinizi kullanabilirsiniz. Daha Ctrl / Cmdince artışlarla ayarlamak için kaydırırken basılı tutun
Bu yöntemle ilgili bir sorun, bazı noktalarda çakışma olabilir:
Mükemmel olmaları gerekiyorsa, bunların manuel olarak düzenlenmesi gerekebilir. Satır başına en fazla 1 çakışma olmalıdır.
Illustrator'ın deforme etme ve dönüştürme efekti, bu tür yinelenen desen için mükemmeldir, ancak tam olarak bu paterni elde etmek için biraz ince ayar gerektirecektir. Noktalı bir çizgiyle başlayın (örneğin, 11 noktalı)
Üzerinden Dönüşüm Etkisi Ekleme Effect > Distort & Transform > Transform...
İç sıraların çok fazla noktaya sahip olduğunu fark edeceksiniz. Manuel ayarlama burada devreye giriyor, ancak bu sizi gerisini anlamaya yetecek kadar ileri götürecek.
Inkscape kullanın:
Ve sonuç (OP görüntüsüyle eşleşmek için 22.5 derece kullanarak):