Programmgesteuertes Erstellen von strahlenden Punktreihen

Ich möchte ein Lochmuster für Lautsprecher wie folgt erstellen:Geben Sie hier die Bildbeschreibung ein

Aber ich bin mir nicht sicher, wo ich anfangen soll. Geht das ohne mühseliges Positionieren in Illustrator oder ähnlicher Software?

Es wäre trivial, etwas wie Python zu verwenden, um ein SVG mit korrekt positionierten/großen Punkten zu erstellen, dann das SVG in Illustrator zu öffnen, erneut als .ai zu speichern und von dort aus fortzufahren.
Trivial ist richtig. Schreiben Sie eine polare in eine kartesische Transformation, dann verschachtelte Schleifen, einen Schrittradius und den anderen Schrittwinkel. In Ihrem Beispiel beträgt der Winkelschritt 9 Grad oder PI/10.

Antworten (5)

Ob das Bild selbst in TK erstellt wurde, zur Hand ist oder nicht, legen Sie nicht fest. Wenn Sie diesen Code bereits haben, können Sie die Leinwand der TK-Anwendung als EPS exportieren und in Illustrator öffnen. Alles, was Sie tun müssen, ist anzurufen canvas.postscript().

Wenn Sie TK verwenden möchten

Einfaches Beispiel in 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()

Dadurch entsteht eine Datei mit dem Namen "patten.eps".

Ergebnis von pattern.eps

Bild 1 : Öffnen des generierten EPS im Illustrator.

Sie können dies in ExtendScript, SVG oder direkt durch Schreiben des EPS-Programms tun, was alles einfach ist (siehe Anhang unten für einige Beispiele). Siehe folgende Beiträge für Ressourcen:

PS : Ich weiß nicht, ob es sich lohnt, ein Skript zu schreiben, da es ungefähr 3 Minuten dauert, sie mit Hilfe des Rotationswerkzeugs und Ctrl+ einzuzeichnenD

Parametrische Mischung in Illustrator

  1. Zeichne einen Kreis.
  2. dupliziere es.
  3. Mischen Sie die Kreise
  4. Zeichnen Sie einen weiteren Kreis, der die Wirbelsäule darstellt, und schneiden Sie ihn an einem Punkt
  5. Wählen Sie sowohl Überblendung als auch Kreis aus und führen Sie Objekt → Überblendung → Wirbelsäule ersetzen aus
  6. Passen Sie die Anzahl der Kugeln mit Objekt → Überblenden → Überblendoptionen ... minus ein Objekt an.
  7. Kopieren Sie die Größe und Optionen der Spne-Kreise und passen Sie sie an. erledigt

ein Ring

Bild 2 : Ein Ring mit obiger Methode


Anhang 1: Mit handschriftlichem 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

Anhang 2: ExtendScript-Beispiel

#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);
}
Danke - ich habe das tk-Fenster nicht, es war nur ein Beispiel für das Muster, das ich gefunden habe
@Tom Deshalb habe ich Alternativen aufgelistet.
Hah, das ist großartig, ich habe irgendwo gelesen, dass PostScript Turing vollständig ist, aber ich habe noch nie zuvor jemanden gesehen, der tatsächlich darin codiert.

Ich füge meine Methode hinzu, da sie mir am einfachsten erscheint. Grundsätzlich gilt für Sie:

  1. Generieren Sie die Kreise rechnerisch in Python
  2. Rendern Sie sie als einfache SVG-Datei
  3. Datei in Illustrator öffnen

Hier ist das Python-Skript (erfordert svgwriteund 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())

Es erstellt eine SVG-Datei in dem Verzeichnis, in dem es sich befindet. Sie können diese in einem Browser öffnen:

Geben Sie hier die Bildbeschreibung ein

Oder in Illustrator:

Geben Sie hier die Bildbeschreibung ein

Sie sollten ein größeres Illustrator-Fenster als ich verwenden, meins war jedoch etwas zu klein, um bequem damit zu arbeiten ...

Wenn Sie Python-Skripts keine Dateien erstellen lassen können (möglicherweise in einem Online-Python-Interpreter ausführen), kommentieren Sie einfach dwg.save(). Die letzte Zeile druckt den Inhalt der SVG-Datei auf die Konsole, Sie können dies in Notepad einfügen und dann als my file.svg.

Ich habe mich hinreißen lassen und ein paar "nette" Funktionen hinzugefügt, wie:

  • Stellen Sie sicher, dass die Kreise richtig zentriert sind, damit Kreise mit negativen Koordinaten bei der Anzeige in Ihrem Browser nicht abgeschnitten werden.
  • Ändern Sie die Größe der SVG-Leinwand.

Sie könnten diese einfach weglassen, da Illustrator keine Objekte außerhalb der Leinwandgrenzen ausblendet und Sie die Größe der Leinwand manuell ändern können:

Geben Sie hier die Bildbeschreibung ein

Wenn es dir egal ist, dass die Punkte aneinandergereiht sind ...

Mit einem gestrichelten Strich können Sie schnell etwas Ähnliches wie Ihr Beispiel in Illustrator erstellen. Um die gleichmäßig verteilten Ringe einfach zu zeichnen, würde ich das Polar Grid Tool verwenden .

Optionen des Polargitter-Werkzeugs Ergebnis des Polar Grid Tools

Dann müssen Sie nur noch den Strich auf den Ringen so einstellen, dass er mit Lücken gestrichelt ist, die Ihren Wünschen entsprechen:

Strichfeld-Optionen Strahlende Punktreihen

Sie können natürlich jede Zeile feinabstimmen, um bei Bedarf weitere Punkte hinzuzufügen, indem Sie einfach den individuellen Abstandswert erhöhen oder verringern. Wenn das Lückenfeld aktiv ist, können Sie mit Ihrem Scrollrad den Wert schnell ändern. Halten Sie Ctrl / Cmdbeim Scrollen gedrückt, um die Einstellung in feineren Schritten vorzunehmen

Strichfeld-Optionen Strahlende Punktreihen

Ein Problem bei dieser Methode besteht darin, dass sich einige Punkte möglicherweise überschneiden:

Punktüberlappung

Diese müssen möglicherweise manuell bearbeitet werden, wenn sie perfekt sein sollen. Es sollte höchstens 1 Überlappung pro Reihe geben.

Gut, Mischung ist besser zum Ausrichten hart
Es ist ein Lautsprechergitter, entweder druckt er es auf etwas Aluminium und bohrt manuell durch jede Markierung. In diesem Fall spielt eine etwas breite Markierung keine Rolle, oder er konvertiert in DXF und verwendet eine CNC-Fräse, in diesem Fall ein bisschen breites Loch spielt keine Rolle.

Wenn es dir wichtig ist, dass die Punkte aneinandergereiht sind ...

Der Verzerrungs- und Transformationseffekt von Illustrator ist perfekt für diese Art von sich wiederholenden Mustern, aber um genau dieses Muster zu erhalten, müssen einige Anpassungen vorgenommen werden. Beginnen Sie mit einer gepunkteten Linie (mit 11 Punkten für Ihr Beispiel)

Bereich Strichoptionen Gepunktete Linie

Fügen Sie einen Transformationseffekt hinzu überEffect > Distort & Transform > Transform...

Optionen für Transformationseffekte Strahlende Punktreihen

Sie werden feststellen, dass die inneren Reihen zu viele Punkte haben. Hier kommt die manuelle Optimierung ins Spiel, aber das sollte Sie weit genug bringen, um den Rest herauszufinden.

Verwenden Sie Inkscape:

  1. Erstellen Sie kozentrische Hilfslinien und doppelklicken Sie auf die Linien, um sie um den gleichen Betrag zu drehen (ich habe 30 Grad verwendet).
  2. Erstellen Sie eine Reihe von kozentrischen ungefüllten Kreisen, indem Sie Breite und Höhe manuell festlegen und sie in die Mitte verschieben.
  3. Erstellen Sie einen gefüllten Kreis und kopieren Sie ihn mehrmals.
  4. Verwenden Sie das Werkzeug „Zeilen und Spalten“, um sie mit gleichem Abstand entlang einer Reihe zu verteilen
  5. Gruppiere die Kreise und drehe sie dann. Platzieren Sie sie schließlich so, dass die Mitte mit der Führungskreuzung übereinstimmt.
  6. Kopieren und erneut einfügen.

Geben Sie hier die Bildbeschreibung ein

Und das Ergebnis (unter Verwendung von 22,5 Grad, um dem Bild des OP zu entsprechen):

Geben Sie hier die Bildbeschreibung ein