Tôi muốn tạo một mẫu lỗ loa như thế này:
Nhưng tôi không chắc bắt đầu từ đâu. Điều này có thể đạt được mà không cần định vị tốn công trong Illustrator hoặc phần mềm tương tự không?
Tôi muốn tạo một mẫu lỗ loa như thế này:
Nhưng tôi không chắc bắt đầu từ đâu. Điều này có thể đạt được mà không cần định vị tốn công trong Illustrator hoặc phần mềm tương tự không?
Câu trả lời:
Tôi sẽ thêm phương pháp của mình, vì dường như nó đơn giản nhất. Về cơ bản, bạn:
Đây là tập lệnh Python (yêu cầu svgwrite
và 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())
Nó sẽ tạo một tệp SVG trong thư mục chứa trong đó. Bạn có thể mở tệp này trong trình duyệt:
Hoặc trong Illustrator:
Bạn nên sử dụng cửa sổ Illustrator lớn hơn tôi, tuy nhiên, cái của tôi quá nhỏ để có thể làm việc thoải mái ...
Nếu bạn không thể có tập lệnh Python tạo tệp (có thể chạy tệp này trong trình thông dịch Python trực tuyến) thì chỉ cần bình luận dwg.save()
. Dòng cuối cùng in nội dung của SVG sang bàn điều khiển, bạn có thể dán phần này vào Notepad, sau đó lưu dưới dạng my file.svg
.
Tôi đã mang đi và thêm một số tính năng "gọn gàng", như:
Bạn có thể dễ dàng loại bỏ chúng, vì Illustrator không ẩn các đối tượng bên ngoài giới hạn canvas và cho phép bạn thay đổi kích thước canvas theo cách thủ công:
Bạn không thực sự xác định liệu hình ảnh có phải là thứ bạn tự tạo trong TK hay không, có trong tay hay không. Nếu bạn đã có mã này thì bạn có thể xuất canvas ứng dụng TK dưới dạng EPS và mở nó trong phần minh họa. Tất cả bạn cần làm là gọi canvas.postscript()
.
Mẫu đơn giản trong 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()
Điều này dẫn đến một tập tin có tên "patten.eps"
.
Hình 1 : Mở EPS được tạo trong họa sĩ minh họa.
Bạn có thể thực hiện điều này trong extScript, SVG hoặc trực tiếp bằng cách viết chương trình EPS tất cả đều dễ thực hiện (xem phụ lục bên dưới để biết một số ví dụ). Xem các bài viết sau cho các tài nguyên:
PS : Tôi không biết có đáng để viết kịch bản hay không vì phải mất khoảng 3 phút để vẽ chúng với sự trợ giúp của công cụ xoay và Ctrl+D
Hình 2 : Một vòng với phương pháp trên
%!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);
}
Bạn có thể nhanh chóng tạo ra một cái gì đó tương tự như ví dụ của bạn trong Illustrator bằng cách sử dụng nét vẽ đứt. Để vẽ các vòng cách đều nhau một cách dễ dàng, tôi sử dụng Công cụ lưới cực .
Sau đó, đó chỉ là vấn đề đặt Stroke trên các vòng tròn với các khoảng trống phù hợp với sở thích của bạn:
Tất nhiên bạn có thể tinh chỉnh từng hàng để thêm nhiều dấu chấm nếu cần, chỉ cần tăng hoặc giảm giá trị khoảng cách riêng lẻ. Khi hộp khoảng cách hoạt động, bạn có thể sử dụng bánh xe cuộn của mình để nhanh chóng thay đổi giá trị. Giữ Ctrl / Cmdtrong khi cuộn để điều chỉnh tăng dần
Một vấn đề với phương pháp này là có thể có một số trùng lặp trong một số dấu chấm:
Chúng có thể cần được chỉnh sửa thủ công nếu bạn cần chúng hoàn hảo. Nên có tối đa 1 chồng chéo trên mỗi hàng.
Hiệu ứng biến dạng và biến đổi của Illustrator là hoàn hảo cho kiểu lặp lại này, nhưng để có được mẫu chính xác đó, nó sẽ cần một số điều chỉnh. Bắt đầu với một đường chấm chấm (với 11 chấm cho ví dụ của bạn)
Thêm hiệu ứng chuyển đổi qua Effect > Distort & Transform > Transform...
Bạn sẽ nhận thấy rằng các hàng bên trong có quá nhiều dấu chấm. Đó là nơi tinh chỉnh thủ công đến, nhưng điều này sẽ giúp bạn đủ xa để tìm ra phần còn lại.
Sử dụng Inkscape:
Và kết quả (sử dụng 22,5 độ để khớp với hình ảnh của OP):