ฉันต้องการสร้างรูปแบบรูลำโพงเช่นนี้:
แต่ฉันไม่แน่ใจว่าจะเริ่ม สามารถทำได้โดยไม่ต้องวางตำแหน่งลำบากใน 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 ที่ใหญ่กว่าตัวฉันเองเหมืองของฉันเล็กไปหน่อยที่จะทำงานได้อย่างสะดวกสบาย ...
ถ้าคุณไม่สามารถมีสคริปต์หลามสร้างไฟล์ (อาจจะทำงานนี้ในการล่ามหลามออนไลน์) dwg.save()
แล้วก็ออกมาแสดงความคิดเห็น บรรทัดสุดท้ายพิมพ์เนื้อหาของ SVG ไปยังคอนโซลคุณสามารถวางนี้ลงใน Notepad 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 ที่สร้างขึ้นในผู้วาดภาพประกอบ
คุณสามารถทำได้ใน ExpandScript, SVG หรือโดยตรงโดยการเขียนโปรแกรม EPS ซึ่งทั้งหมดนั้นง่ายต่อการทำ (ดูภาคผนวกด้านล่างสำหรับตัวอย่างบางส่วน) ดูโพสต์ต่อไปนี้สำหรับทรัพยากร:
PS : ฉันไม่รู้ว่ามันคุ้มค่ากับการเขียนสคริปต์เพราะใช้เวลาประมาณ 3 นาทีในการดึงมันเข้ามาด้วยความช่วยเหลือของเครื่องมือหมุนและ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 ได้อย่างรวดเร็วโดยใช้เส้นประที่ขีด การวาดแหวนเว้นระยะเท่ากันได้อย่างง่ายดายผมใช้กริดเครื่องมือขั้วโลก
จากนั้นเป็นเรื่องของการตั้ง Stroke บนวงแหวนเพื่อให้มีช่องว่างที่เหมาะกับความชอบของคุณ:
แน่นอนว่าคุณสามารถปรับแต่งแต่ละแถวเพื่อเพิ่มจุดมากขึ้นถ้าจำเป็นเพียงแค่เพิ่มหรือลดค่าช่องว่างของแต่ละบุคคล เมื่อเปิดใช้งานกล่องช่องว่างคุณสามารถใช้ล้อเลื่อนเพื่อเปลี่ยนค่าได้อย่างรวดเร็ว กดค้างไว้Ctrl / Cmdในขณะเลื่อนเพื่อปรับเพิ่มทีละขั้น
ปัญหาของวิธีนี้คืออาจมีบางส่วนทับซ้อนกันในบางจุด:
อาจต้องแก้ไขด้วยตนเองหากคุณต้องการให้สมบูรณ์ ควรมีการทับซ้อนกันไม่เกิน 1 รายการต่อแถว
การบิดเบือนและการแปลงเอฟเฟ็กต์ของ Illustrator นั้นสมบูรณ์แบบสำหรับรูปแบบการทำซ้ำนี้ แต่เพื่อให้ได้รูปแบบที่แน่นอนนั้นจะต้องมีการปรับแต่งเล็กน้อย เริ่มต้นด้วยเส้นประ (มี 11 จุดสำหรับตัวอย่างของคุณ)
เพิ่มผลการแปลงผ่าน Effect > Distort & Transform > Transform...
คุณจะสังเกตเห็นว่าแถวด้านในมีจุดมากเกินไป นั่นคือสิ่งที่การปรับแต่งด้วยตนเองเข้ามา แต่สิ่งนี้น่าจะทำให้คุณพอที่จะนึกถึงส่วนที่เหลือ
ใช้ Inkscape:
และผลลัพธ์ (ใช้ 22.5 องศาเพื่อให้ตรงกับภาพของ OP):