โปรแกรมสร้างแถวของจุดที่เปล่งประกาย


17

ฉันต้องการสร้างรูปแบบรูลำโพงเช่นนี้: ป้อนคำอธิบายรูปภาพที่นี่

แต่ฉันไม่แน่ใจว่าจะเริ่ม สามารถทำได้โดยไม่ต้องวางตำแหน่งลำบากใน Illustrator หรือซอฟต์แวร์ที่คล้ายกัน?


มันจะไม่สำคัญหากใช้บางอย่างเช่น Python เพื่อสร้าง SVG ที่มีจุด / ขนาดที่ถูกต้องจากนั้นเปิด SVG ใน Illustrator บันทึกเป็น. ai และไปจากที่นั่น
Superbest

Trivial นั้นถูกต้อง เขียนขั้วโลกไปยังการแปลงคาร์ทีเซียนจากนั้นซ้อนลูปรัศมีหนึ่งก้าวและมุมก้าวอื่น ๆ ในตัวอย่างของคุณขั้นตอนเชิงมุมคือ 9 องศาหรือ PI / 10
Peter Wone

คำตอบ:


9

ฉันจะเพิ่มวิธีการของฉันเพราะดูเหมือนว่าฉันจะเป็นวิธีที่ง่ายที่สุด โดยทั่วไปคุณ:

  1. สร้างวงกลมใน Python
  2. แสดงผลเป็นไฟล์ SVG แบบง่าย
  3. เปิดไฟล์ใน 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แล้วบันทึกเป็น

ฉันถูกพาไปและเพิ่มคุณสมบัติ "เรียบร้อย" บางอย่างเช่น:

  • ตรวจสอบให้แน่ใจว่าวงกลมอยู่กึ่งกลางอย่างเหมาะสมดังนั้นวงกลมที่มีพิกัดเชิงลบจะไม่ถูกตัดเมื่อดูในเบราว์เซอร์ของคุณ
  • ปรับขนาดผ้าใบ SVG

คุณสามารถแยกสิ่งเหล่านี้ออกได้ง่ายเนื่องจาก Illustrator ไม่ได้ซ่อนวัตถุอยู่นอกขอบเขตของผืนผ้าใบและอนุญาตให้คุณปรับขนาดผืนผ้าใบด้วยตนเอง:

ป้อนคำอธิบายรูปภาพที่นี่


16

คุณไม่ได้ระบุว่ารูปภาพนั้นเป็นสิ่งที่คุณสร้างขึ้นด้วยตัวเองใน TK มีมือหรือไม่ หากคุณมีรหัสนี้อยู่แล้วคุณสามารถส่งออกแอพพลิเคชั่น TK ผ้าใบในรูปแบบ EPS และเปิดในภาพประกอบ canvas.postscript()ทั้งหมดที่คุณต้องทำคือการโทร

หากคุณต้องการใช้ TK

ตัวอย่างง่ายๆใน 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"ผลนี้ในไฟล์ชื่อ

ผลลัพธ์ของ pattern.eps

ภาพที่ 1 : การเปิด EPS ที่สร้างขึ้นในผู้วาดภาพประกอบ

คุณสามารถทำได้ใน ExpandScript, SVG หรือโดยตรงโดยการเขียนโปรแกรม EPS ซึ่งทั้งหมดนั้นง่ายต่อการทำ (ดูภาคผนวกด้านล่างสำหรับตัวอย่างบางส่วน) ดูโพสต์ต่อไปนี้สำหรับทรัพยากร:

PS : ฉันไม่รู้ว่ามันคุ้มค่ากับการเขียนสคริปต์เพราะใช้เวลาประมาณ 3 นาทีในการดึงมันเข้ามาด้วยความช่วยเหลือของเครื่องมือหมุนและCtrl+D

การผสมผสานพารามิเตอร์ใน Illustrator

  1. วาดวงกลม
  2. ทำซ้ำ
  3. ผสมผสานวงกลม
  4. วาดวงกลมอื่นที่แสดงถึงกระดูกสันหลังตัดมันในจุดเดียว
  5. เลือกทั้งการผสมผสานและวงกลมและทำObject → Blend →แทนที่กระดูกสันหลัง
  6. ปรับจำนวนของทรงกลมด้วยObject → Blend → Blend Options ...ลบหนึ่งวัตถุ
  7. คัดลอกและปรับขนาดและตัวเลือกวงกลม spne เสร็จแล้ว

หนึ่งแหวน

ภาพที่ 2 : แหวนหนึ่งวงโดยใช้วิธีด้านบน


ภาคผนวก 1: ด้วย EPS ที่เขียนด้วยตนเอง

%!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

ภาคผนวกที่ 2: ตัวอย่าง ExtendScript

#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);
}

ขอบคุณ - ฉันไม่มีหน้าต่าง tk มันเป็นเพียงตัวอย่างของรูปแบบที่ฉันพบ
Tom

1
@Tom Thats ทำไมฉันแสดงรายการทางเลือก
joojaa

1
ฮะมันยอดเยี่ยมมากฉันอ่านที่ไหนสักแห่งที่ PostScript เสร็จสมบูรณ์ แต่ฉันไม่เคยเห็นใครรู้รหัสมาก่อนเลย
Peter Wone

9

หากคุณไม่สนใจจุดที่เรียงกัน ...

คุณสามารถทำสิ่งที่คล้ายกับตัวอย่างของคุณใน Illustrator ได้อย่างรวดเร็วโดยใช้เส้นประที่ขีด การวาดแหวนเว้นระยะเท่ากันได้อย่างง่ายดายผมใช้กริดเครื่องมือขั้วโลก

ตัวเลือกเครื่องมือ Polar Grid ผลเครื่องมือ Polar Grid

จากนั้นเป็นเรื่องของการตั้ง Stroke บนวงแหวนเพื่อให้มีช่องว่างที่เหมาะกับความชอบของคุณ:

ตัวเลือกแผงจังหวะ แผ่แถวของจุด

แน่นอนว่าคุณสามารถปรับแต่งแต่ละแถวเพื่อเพิ่มจุดมากขึ้นถ้าจำเป็นเพียงแค่เพิ่มหรือลดค่าช่องว่างของแต่ละบุคคล เมื่อเปิดใช้งานกล่องช่องว่างคุณสามารถใช้ล้อเลื่อนเพื่อเปลี่ยนค่าได้อย่างรวดเร็ว กดค้างไว้Ctrl / Cmdในขณะเลื่อนเพื่อปรับเพิ่มทีละขั้น

ตัวเลือกแผงจังหวะ แผ่แถวของจุด

ปัญหาของวิธีนี้คืออาจมีบางส่วนทับซ้อนกันในบางจุด:

จุดทับซ้อนกัน

อาจต้องแก้ไขด้วยตนเองหากคุณต้องการให้สมบูรณ์ ควรมีการทับซ้อนกันไม่เกิน 1 รายการต่อแถว


1
สิ่งที่ดีการผสมผสานที่ดีกว่าสำหรับการจัดตำแหน่งที่ยาก
joojaa

1
มันเป็นตะแกรงสำหรับลำโพงไม่ว่าเขาจะไปที่หน้าจอไหมบนอลูมิเนียมและเจาะเครื่องหมายแต่ละอันด้วยตนเองในกรณีนี้เครื่องหมายที่กว้างเล็กน้อยจะไม่สำคัญหรือเขาจะแปลงเป็น DXF และใช้ CNC mill ซึ่งในกรณีเล็กน้อย หลุมกว้างจะไม่สำคัญ
Peter Wone

9

ถ้าคุณทำเกี่ยวกับการดูแลจุดแถว ...

การบิดเบือนและการแปลงเอฟเฟ็กต์ของ Illustrator นั้นสมบูรณ์แบบสำหรับรูปแบบการทำซ้ำนี้ แต่เพื่อให้ได้รูปแบบที่แน่นอนนั้นจะต้องมีการปรับแต่งเล็กน้อย เริ่มต้นด้วยเส้นประ (มี 11 จุดสำหรับตัวอย่างของคุณ)

บานหน้าต่างตัวเลือกจังหวะ จุดไข่ปลา

เพิ่มผลการแปลงผ่าน Effect > Distort & Transform > Transform...

ตัวเลือกการแปลงผล แผ่แถวของจุด

คุณจะสังเกตเห็นว่าแถวด้านในมีจุดมากเกินไป นั่นคือสิ่งที่การปรับแต่งด้วยตนเองเข้ามา แต่สิ่งนี้น่าจะทำให้คุณพอที่จะนึกถึงส่วนที่เหลือ


8

ใช้ Inkscape:

  1. สร้างเส้นบอกแนวร่วมเป็นศูนย์กลางและดับเบิลคลิกที่เส้นเพื่อหมุนตามจำนวนที่เท่ากัน (ฉันใช้ 30 องศา)
  2. สร้างชุดวงกลมที่ไม่ได้บรรจุร่วมเป็นวงกลมตั้งค่าความกว้างและความสูงด้วยตนเองและย้ายไปที่กึ่งกลาง
  3. สร้างวงกลมที่เต็มไปและคัดลอกวางจำนวนครั้ง
  4. ใช้เครื่องมือ "แถวและคอลัมน์" เพื่อกระจายออกไปตามแถวโดยมีระยะห่างเท่ากัน
  5. จัดกลุ่มวงกลมแล้วหมุน ในที่สุดก็วางพวกเขาเพื่อให้ตรงกลางของเส้นตรงกับทางแยก
  6. คัดลอกและวางอีกครั้ง

ป้อนคำอธิบายรูปภาพที่นี่

และผลลัพธ์ (ใช้ 22.5 องศาเพื่อให้ตรงกับภาพของ OP):

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.