Lập trình tạo các hàng chấm phát xạ


17

Tôi muốn tạo một mẫu lỗ loa như thế này: nhập mô tả hình ảnh ở đâ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?


Sẽ thật tầm thường khi sử dụng một cái gì đó như Python để tạo một SVG với các chấm được định vị / kích thước chính xác, sau đó mở SVG trong Illustrator, lưu lại dưới dạng .ai và đi từ đó.
Tuyệt vời nhất

Tầm thường là đúng. Viết một cực để biến đổi Cartesian, sau đó các vòng lặp lồng nhau, bán kính một bước và góc bước khác. Trong ví dụ của bạn, bước góc là 9 độ hoặc PI / 10.
Peter Wone

Câu trả lời:


9

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:

  1. Tính toán tạo các vòng tròn trong Python
  2. Kết xuất chúng dưới dạng tệp SVG đơn giản
  3. Mở tệp trong Illustrator

Đây là tập lệnh Python (yêu cầu svgwritemath):

"""
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:

nhập mô tả hình ảnh ở đây

Hoặc trong Illustrator:

nhập mô tả hình ảnh ở đây

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ư:

  • Đảm bảo các vòng tròn được căn giữa chính xác, để các vòng tròn có tọa độ âm không bị cắt bớt khi xem trong trình duyệt của bạn.
  • Thay đổi kích thước khung vẽ SVG.

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:

nhập mô tả hình ảnh ở đây


16

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().

Nếu bạn muốn sử dụng TK

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".

kết quả của mẫu.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

Pha trộn tham số trong Illustrator

  1. Vẽ một vòng tròn.
  2. nhân đôi nó
  3. pha trộn các vòng tròn
  4. vẽ một vòng tròn khác đại diện cho cột sống, cắt nó ở một điểm
  5. Chọn cả Blend và circle và làm Object → Blend → Thay thế cột sống
  6. điều chỉnh số lượng hình cầu bằng Object → Blend → Blend Options ... trừ một đối tượng.
  7. Sao chép và điều chỉnh kích thước vòng tròn spne và các tùy chọn. làm xong

một chiếc nhẫn

Hình 2 : Một vòng với phương pháp trên


Phụ lục 1: Với EPS được viết thủ công

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

Phụ lục 2: Ví dụ 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);
}

Cảm ơn - Tôi không có cửa sổ tk, nó chỉ là một ví dụ về mẫu mà tôi tìm thấy
Tom

1
@Tom Đó là lý do tại sao tôi liệt kê các lựa chọn thay thế.
joojaa

1
Thật tuyệt vời, tôi đã đọc ở đâu đó rằng PostScript đã hoàn thành nhưng tôi chưa bao giờ thấy ai thực sự viết mã trong đó trước đây.
Peter Wone

9

Nếu bạn không quan tâm đến các chấm xếp hàng ...

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 .

Tùy chọn công cụ lưới cực Kết quả 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ùy chọn bảng điều khiển đột quỵ các hàng chấm

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

Tùy chọn bảng điều khiển đột quỵ các hàng chấm

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ấm chồng lên nhau

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.


1
Tốt, pha trộn là tốt hơn để sắp xếp khó khăn
joojaa

1
Đó là một loa nướng, anh ta sẽ chiếu lụa lên một số nhôm và khoan thủ công qua từng nhãn hiệu trong trường hợp một dấu rộng hơi không thành vấn đề hoặc anh ta sẽ chuyển đổi sang DXF và sử dụng máy phay CNC, trong trường hợp đó là một chút lỗ rộng sẽ không thành vấn đề.
Peter Wone

9

Nếu bạn làm việc chăm sóc về các dấu chấm xếp 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)

Cửa sổ tùy chọn đột quỵ Đường chấm chấm

Thêm hiệu ứng chuyển đổi qua Effect > Distort & Transform > Transform...

Tùy chọn hiệu ứng chuyển đổi các hàng chấm

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.


8

Sử dụng Inkscape:

  1. Tạo các dòng hướng dẫn đồng tâm và nhấp đúp vào các dòng để xoay theo số lượng bằng nhau (tôi đã sử dụng 30 độ).
  2. Tạo một loạt các vòng tròn không đồng tâm đặt thủ công thiết lập chiều rộng và chiều cao và di chuyển chúng vào trung tâm.
  3. Tạo một vòng tròn đầy, và sao chép dán một số lần.
  4. Sử dụng công cụ "Hàng và Cột" để trải đều chúng dọc theo một hàng, với khoảng cách bằng nhau
  5. Nhóm các vòng tròn, và sau đó xoay chúng. Cuối cùng đặt chúng sao cho đường thẳng của trung tâm với giao lộ hướng dẫn.
  6. Sao chép và dán lại.

nhập mô tả hình ảnh ở đây

Và kết quả (sử dụng 22,5 độ để khớp với hình ảnh của OP):

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.