 |
CLIP Score: 28.36
from AIDL import *
def city_skyline(
num_buildings: int = 5,
min_height: float = 6*inches,
max_height: float = 12*inches,
min_width: float = 1.5*inches,
max_width: float = 3*inches,
detail_spacing: float = 0.5*inches
):
"""
Model a simple city skyline with a given number of buildings of varying heights and widths.
Windows and other details are added as engravings.
"""
from random import uniform
# Define the base structure
skyline = Solid()
for i in range(num_buildings):
width = uniform(min_width, max_width)
height = uniform(min_height, max_height)
# Define each building as a Solid node
building = Solid(shift=(i * (width + 0.5*inches), 0)) # Shift each building along the x-axis
skyline.__setattr__(f'building_{i}', building)
# Define the building's geometry
building.body = Rectangle((0, height/2), width, height)
# Add window details as Drawing nodes
details = Drawing()
building.details = details
# Add rows of windows to the building
num_window_rows = int(height // detail_spacing) - 1
num_window_cols = int(width // detail_spacing) - 1
windows = []
for row in range(num_window_rows):
for col in range(num_window_cols):
center_x = (col + 0.5) * detail_spacing - width / 2
center_y = (row + 0.5) * detail_spacing - height / 2
window = Rectangle((center_x, center_y), detail_spacing / 3, detail_spacing / 2)
windows.append(window)
details.windows = windows
return skyline
with AIDL_2D:
model = city_skyline()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a city skyline
To create a city skyline, we'll use several primitive and compound geometric shapes to define different buildings. We'll also use some Drawing nodes to add engraving details for windows and other decorations on the buildings. Here's a step-by-step approach to creating a city skyline:
1. Define the base structure as a Solid node.
2. Add multiple Solid nodes as buildings with varying heights and widths.
3. Add Drawing nodes for windows and details.
Let's start!
```python
from AIDL import *
def city_skyline(
num_buildings: int = 5,
min_height: float = 6*inches,
max_height: float = 12*inches,
min_width: float = 1.5*inches,
max_width: float = 3*inches,
detail_spacing: float = 0.5*inches
):
"""
Model a simple city skyline with a given number of buildings of varying heights and widths.
Windows and other details are added as engravings.
"""
from random import uniform
# Define the base structure
skyline = Solid()
for i in range(num_buildings):
width = uniform(min_width, max_width)
height = uniform(min_height, max_height)
# Define each building as a Solid node
building = Solid(shift=(i * (width + 0.5*inches), 0)) # Shift each building along the x-axis
skyline.__setattr__(f'building_{i}', building)
# Define the building's geometry
building.body = Rectangle((0, height/2), width, height)
# Add window details as Drawing nodes
details = Drawing()
building.details = details
# Add rows of windows to the building
num_window_rows = int(height // detail_spacing) - 1
num_window_cols = int(width // detail_spacing) - 1
windows = []
for row in range(num_window_rows):
for col in range(num_window_cols):
center_x = (col + 0.5) * detail_spacing - width / 2
center_y = (row + 0.5) * detail_spacing - height / 2
window = Rectangle((center_x, center_y), detail_spacing / 3, detail_spacing / 2)
windows.append(window)
details.windows = windows
return skyline
with AIDL_2D:
model = city_skyline()
print(model.Solve())
model.Render()
```
This program defines a city skyline with a specified number of buildings of random heights and widths within the given ranges. Each building has windows added as Drawing nodes, ensuring they are only engraved, not cut.
Please run this program in your AIDL environment to generate the skyline model. Let me know if you have any specific adjustments or additions you'd like to make!
|