 |
CLIP Score: 23.37
from AIDL import *
def castle(
tower_radius: float = 2 * inches,
tower_height: float = 6 * inches,
turret_radius: float = 1 * inch,
turret_height: float = 4 * inches,
wall_thickness: float = 0.5 * inches,
wall_length: float = 8 * inches,
gate_width: float = 2 * inches,
gate_height: float = 3 * inches
):
"""
Creates a model of a simple castle with a central tower, four corner turrets, connecting walls, and a gate.
"""
castle = Solid()
# Main tower
main_tower = Solid()
castle.main_tower = main_tower
main_tower.body = Circle((0, 0), tower_radius)
# Corner turrets
turrets = []
shift_positions = [(wall_length / 2, wall_length / 2),
(-wall_length / 2, wall_length / 2),
(-wall_length / 2, -wall_length / 2),
(wall_length / 2, -wall_length / 2)]
for pos in shift_positions:
turret = Solid(shift=pos)
turret.body = Circle((0, 0), turret_radius)
turrets.append(turret)
castle.turrets = turrets
# Walls
walls = []
wall_shifts = [(0, wall_length / 2 + turret_radius),
(0, -wall_length / 2 - turret_radius),
(wall_length / 2 + turret_radius, 0),
(-wall_length / 2 - turret_radius, 0)]
wall_orientations = [True, True, False, False]
for shift, axis_aligned in zip(wall_shifts, wall_orientations):
wall = Solid(shift=shift)
wall.body = Rectangle((0, 0), wall_length + 2 * turret_radius, wall_thickness, axis_aligned=axis_aligned)
walls.append(wall)
castle.walls = walls
# Gate - positioned at the bottom wall
gate_shift = (0, -wall_length / 2 - turret_radius - wall_thickness / 2)
castle.gate = Solid(shift=gate_shift)
castle.gate.body = Rectangle((0, 0), gate_width, gate_height)
return castle
with AIDL_2D:
model = castle()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a castle
To generate a castle, we'll break down the design into smaller pieces and compose them together. We'll create structures for the main components of the castle:
1. **Main Tower**: A large cylindrical tower.
2. **Walls**: Rectangular walls connecting the towers.
3. **Gate**: A central gate structure.
4. **Turrets**: Smaller cylindrical turrets on the corners.
5. **Details**: Engravings and other details.
Let's start step-by-step:
1. **Define the main tower and turrets**.
2. **Define the walls**.
3. **Define the gate**.
4. **Combine them into the main `castle` structure**.
Here's how this could be accomplished in AIDL:
```python
from AIDL import *
def castle(
tower_radius: float = 2 * inches,
tower_height: float = 6 * inches,
turret_radius: float = 1 * inch,
turret_height: float = 4 * inches,
wall_thickness: float = 0.5 * inches,
wall_length: float = 8 * inches,
gate_width: float = 2 * inches,
gate_height: float = 3 * inches
):
"""
Creates a model of a simple castle with a central tower, four corner turrets, connecting walls, and a gate.
"""
castle = Solid()
# Main tower
main_tower = Solid()
castle.main_tower = main_tower
main_tower.body = Circle((0, 0), tower_radius)
# Corner turrets
turrets = []
shift_positions = [(wall_length / 2, wall_length / 2),
(-wall_length / 2, wall_length / 2),
(-wall_length / 2, -wall_length / 2),
(wall_length / 2, -wall_length / 2)]
for pos in shift_positions:
turret = Solid(shift=pos)
turret.body = Circle((0, 0), turret_radius)
turrets.append(turret)
castle.turrets = turrets
# Walls
walls = []
wall_shifts = [(0, wall_length / 2 + turret_radius),
(0, -wall_length / 2 - turret_radius),
(wall_length / 2 + turret_radius, 0),
(-wall_length / 2 - turret_radius, 0)]
wall_orientations = [True, True, False, False]
for shift, axis_aligned in zip(wall_shifts, wall_orientations):
wall = Solid(shift=shift)
wall.body = Rectangle((0, 0), wall_length + 2 * turret_radius, wall_thickness, axis_aligned=axis_aligned)
walls.append(wall)
castle.walls = walls
# Gate - positioned at the bottom wall
gate_shift = (0, -wall_length / 2 - turret_radius - wall_thickness / 2)
castle.gate = Solid(shift=gate_shift)
castle.gate.body = Rectangle((0, 0), gate_width, gate_height)
return castle
with AIDL_2D:
model = castle()
print(model.Solve())
model.Render()
```
### Explanation
- **Main Tower**: Positioned at the center.
- **Turrets**: Positioned at the four corners. Their positions are shifted accordingly.
- **Walls**: Connected between the turrets. Positioned and oriented based on the required alignment.
- **Gate**: Positioned at the bottom wall and represented as a rectangle.
Feel free to tweak the parameters to customize the dimensions and appearance of the castle further. Let me know if you have any adjustments or additional features in mind!
|