Creación programática de filas radiantes de puntos

Quiero crear un patrón de agujeros de altavoz como este:ingrese la descripción de la imagen aquí

Pero no estoy seguro de por dónde empezar. ¿Se puede lograr esto sin un posicionamiento laborioso en Illustrator o un software similar?

Sería trivial usar algo como Python para crear un SVG con puntos colocados/de tamaño correctos, luego abrir el SVG en Illustrator, volver a guardarlo como .ai y continuar desde allí.
Trivial es correcto. Escriba una transformada polar a cartesiana, luego bucles anidados, un radio de paso y el otro ángulo de paso. En su ejemplo, el paso angular es de 9 grados o PI/10.

Respuestas (5)

En realidad, no especifica si la imagen es algo que ha generado usted mismo en TK, tiene a mano o no. Si ya tiene este código, puede exportar el lienzo de aplicaciones TK como EPS y abrirlo en Illustrator. Todo lo que necesita hacer es llamar canvas.postscript().

Si quieres usar TK

Muestra simple en 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()

Esto da como resultado un archivo llamado "patten.eps".

resultado de patrón.eps

Imagen 1 : Abriendo el EPS generado en illustrator.

Puede hacer esto en extendScript, SVG o directamente escribiendo el programa EPS, todos los cuales son fáciles de hacer (consulte el apéndice a continuación para ver algunos ejemplos). Consulte las siguientes publicaciones para obtener recursos:

PD : no sé si vale la pena crear secuencias de comandos, ya que lleva unos 3 minutos dibujarlos con la ayuda de la herramienta de rotación y Ctrl+D

Mezcla paramétrica en Illustrator

  1. Dibuja un circulo.
  2. duplicarlo
  3. mezclar los círculos
  4. dibuja otro círculo que represente la columna vertebral, córtalo en un punto
  5. Seleccione mezclar y circular y haga Objeto → Mezclar → Reemplazar columna
  6. ajuste el número de esferas con Objeto → Fusión → Opciones de fusión... menos un objeto.
  7. Copie y ajuste el tamaño y las opciones de los círculos spne. hecho

un anillo

Imagen 2 : Un anillo con el método anterior


Apéndice 1: con EPS escrito manualmente

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

Apéndice 2: Ejemplo de 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);
}
Gracias, no tengo la ventana tk, solo fue un ejemplo del patrón que encontré.
@Tom Es por eso que enumeré alternativas.
Hah, eso es increíble, leí en alguna parte que PostScript está completo en Turing, pero nunca vi a nadie codificar en él antes.

Agregaré mi método, ya que me parece que es el más simple. Básicamente, tú:

  1. Genera computacionalmente los círculos en Python
  2. Renderícelos como un archivo SVG simple
  3. Abrir archivo en Illustrator

Aquí está el script de Python (requiere svgwritey 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())

Creará un archivo SVG en el directorio en el que se encuentra. Puede abrirlo en un navegador:

ingrese la descripción de la imagen aquí

O en ilustrador:

ingrese la descripción de la imagen aquí

Sin embargo, debería usar una ventana de Illustrator más grande que la mía, la mía era demasiado pequeña para trabajar cómodamente...

Si no puede hacer que los scripts de Python creen archivos (tal vez ejecutándolos en un intérprete de Python en línea), simplemente comente dwg.save(). La última línea imprime el contenido del SVG en la consola, puede pegarlo en el Bloc de notas y luego guardarlo como archivo my file.svg.

Me dejé llevar y agregué algunas características "pulcras", como:

  • Asegúrese de que los círculos estén correctamente centrados, de modo que los círculos con coordenadas negativas no se recorten cuando los vea en su navegador.
  • Cambie el tamaño del lienzo SVG.

Podría omitirlos fácilmente, ya que Illustrator no oculta los objetos fuera de los límites del lienzo y le permite cambiar el tamaño del lienzo manualmente:

ingrese la descripción de la imagen aquí

Si no te importa que los puntos se alineen...

Puede hacer rápidamente algo similar a su ejemplo en Illustrator usando un trazo discontinuo. Para dibujar fácilmente los anillos espaciados uniformemente, usaría la herramienta Cuadrícula polar .

Opciones de la herramienta Cuadrícula polar Resultado de la herramienta de cuadrícula polar

Luego, solo es cuestión de configurar el Trazo en los anillos para que quede discontinuo con espacios que se ajusten a su gusto:

Opciones del panel de trazo filas radiantes de puntos

Por supuesto, puede ajustar cada fila para agregar más puntos si es necesario, solo aumente o disminuya el valor del espacio individual. Con el cuadro de espacio activo, puede usar su rueda de desplazamiento para cambiar rápidamente el valor. Mantenga Ctrl / Cmdpresionado mientras se desplaza para ajustar en incrementos más finos

Opciones del panel de trazo filas radiantes de puntos

Un problema con este método es que puede haber cierta superposición en algunos de los puntos:

superposición de puntos

Es posible que deba editarlos manualmente si necesita que sean perfectos. Debe haber como máximo 1 superposición por fila.

Buena, la mezcla es mejor para alinear duro
Es una parrilla de parlante, o la va a serigrafiar en un poco de aluminio y taladrar manualmente a través de cada marca, en cuyo caso una marca ligeramente ancha no importará o va a convertir a DXF y usar una fresadora CNC, en cuyo caso un poco el agujero ancho no importará.

Si te importa que los puntos se alineen...

El efecto de distorsión y transformación de Illustrator es perfecto para este tipo de patrón repetitivo, pero para obtener ese patrón exacto, necesitará algunos ajustes. Comience con una línea de puntos (con 11 puntos para su ejemplo)

Panel de opciones de trazo Linea punteada

Agregue un efecto de transformación a través deEffect > Distort & Transform > Transform...

Opciones de efectos de transformación filas radiantes de puntos

Notarás que las filas internas tienen demasiados puntos. Ahí es donde entra en juego el ajuste manual, pero esto debería llevarlo lo suficientemente lejos como para descubrir el resto.

Utilice Inkscape:

  1. Cree líneas de guía cocéntricas y haga doble clic en las líneas para rotar en la misma cantidad (utilicé 30 grados).
  2. Cree una serie de círculos sin relleno cocéntricos configurando manualmente el ancho y la altura, y moviéndolos hacia el centro.
  3. Cree un círculo relleno y copie y pegue varias veces.
  4. Use la herramienta "Filas y columnas" para distribuirlas a lo largo de una fila, con espacios iguales
  5. Agrupa los círculos y luego gíralos. Finalmente, colóquelos de modo que el centro quede alineado con la intersección guía.
  6. Copia y pega de nuevo.

ingrese la descripción de la imagen aquí

Y el resultado (usando 22.5 grados para que coincida con la imagen del OP):

ingrese la descripción de la imagen aquí