RealityBending / Pyllusion

A Parametric Framework to Generate Visual Illusions using Python
https://realitybending.github.io/Pyllusion/
MIT License
57 stars 9 forks source link

New Illusion: Kanizsa Square #20

Open ujdcodr opened 1 month ago

ujdcodr commented 1 month ago

Describe the solution you'd like Screenshot from 2024-05-21 20-18-18

How could we do it?

I have figured out the core logic to produce any configuration of the illusion by altering the radius and spacing (from the edge of the image). The image in the description was generated using the following code.

from PIL import Image, ImageDraw

# Set the dimensions and background color
width, height = 500, 500
image = Image.new("RGB", (width, height), "gray")
draw = ImageDraw.Draw(image)

# Define circle radius and grid spacing
radius = 90
spacing = radius+20

# Define the centers of the circles
circle_centers = [
    (spacing, spacing),
    (width - spacing, spacing),
    (spacing, height - spacing),
    (width - spacing, height - spacing)
]

# Draw the circles
for center in circle_centers:
    draw.ellipse((center[0] - radius, center[1] - radius, center[0] + radius, center[1] + radius), "white")

# Draw the  square
square_size = width - 2*spacing 
draw.rectangle((spacing,spacing,spacing+square_size,spacing+square_size), "gray")

I need some help with understanding how to break this down like the other illusions that have already been implemented.

Some general questions:

  1. What would the illusion strength and difficulty parameters be in this illusion?
  2. What parameters would go into the corresponding _paramters.py file?
  3. For the illusions that have been implemented in the library, I see 5 files. For an initial commit, which ones should I work on?
  4. Followup to Q3, how to approach adding a new illusion as a beginner (first file to create, writing the parameter dictionary, etc.)
  5. How to verify whether the illusion is generated correctly before creating the PR?
ujdcodr commented 1 month ago

@DominiqueMakowski This is an interesting library and figuring out how to implement this illusion was an enjoyable challenge. I would like to add support for this and other illusions mentioned in the TODO items list. I would appreciate your support.