 |
CLIP Score: 24.92
from AIDL import *
def city_skyline(
num_buildings: int = 10,
min_height: float = 50,
max_height: float = 200,
min_width: float = 20,
max_width: float = 50,
building_spacing: float = 10
):
"""
Creates a simple city skyline with a specified number of buildings.
Each building has a random height and width within provided constraints.
"""
import random
skyline = Solid()
buildings = []
# Initial position for the first building
current_x = 0
for i in range(num_buildings):
# Create each building with random dimensions
height = random.uniform(min_height, max_height)
width = random.uniform(min_width, max_width)
building = Solid(shift=(current_x, 0))
building.rect = Rectangle((0, height / 2), width, height)
# Add the building to the skyline structure
setattr(skyline, f'building_{i}', building)
# Add positional constraints for the buildings
if i > 0:
previous_building = buildings[-1]
# Position current building to the right of the previous building
skyline.AddConstraint(
building.bb.left == previous_building.bb.right + building_spacing)
buildings.append(building)
# Update the position for the next building
current_x += width + building_spacing
return skyline
with AIDL_2D:
model = city_skyline()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a city skyline
Sure! Let's break down the task of creating a city skyline into clear steps within the AIDL framework. Here's the plan:
1. **Defining the Structures and Hierarchies**:
- We'll need a `Solid` structure for the skyline itself.
- Every building in the skyline will be a child `Solid` node of the main `Solid` skyline structure.
- Optionally, we can add a `Drawing` for windows and other building details.
2. **Constraints**:
- Each building can have constraints to define its dimensions.
- We'll position them next to each other, possibly with some gap between them.
3. **Geometry**:
- Define rectangles with different dimensions as buildings.
Here’s a complete example program:
```python
from AIDL import *
def city_skyline(
num_buildings: int = 10,
min_height: float = 50,
max_height: float = 200,
min_width: float = 20,
max_width: float = 50,
building_spacing: float = 10
):
"""
Creates a simple city skyline with a specified number of buildings.
Each building has a random height and width within provided constraints.
"""
import random
skyline = Solid()
buildings = []
# Initial position for the first building
current_x = 0
for i in range(num_buildings):
# Create each building with random dimensions
height = random.uniform(min_height, max_height)
width = random.uniform(min_width, max_width)
building = Solid(shift=(current_x, 0))
building.rect = Rectangle((0, height / 2), width, height)
# Add the building to the skyline structure
setattr(skyline, f'building_{i}', building)
# Add positional constraints for the buildings
if i > 0:
previous_building = buildings[-1]
# Position current building to the right of the previous building
skyline.AddConstraint(
building.bb.left == previous_building.bb.right + building_spacing)
buildings.append(building)
# Update the position for the next building
current_x += width + building_spacing
return skyline
with AIDL_2D:
model = city_skyline()
print(model.Solve())
model.Render()
```
### Explanation:
1. **Structures**:
- `skyline`: The main `Solid` structure containing the buildings.
- `building_{i}`: Child `Solid` structures representing individual buildings.
2. **Constraints**:
- Each building is created at a position determined by `current_x`, which keeps track of where the next building should start.
- `building_spacing` ensures there is space between consecutive buildings.
3. **Geometry**:
- Each building is a `Rectangle` with a random height and width within specified ranges.
4. **Rendering**:
- The `city_skyline` function constructs the skyline, and the `with AIDL_2D` block solves and renders the model.
This program will generate a simple skyline with randomly sized buildings, ensuring variety and a dynamic cityscape. Feel free to modify the parameters or add more details to the buildings as needed!
|