 |
CLIP Score: 28.78
from AIDL import *
def clock(face_radius: float = 4*inches, hand_length_ratio: list = [0.5, 0.8, 0.9]):
"""
Creates a simple clock model with a circular face, hour marks, minute marks, and hands.
`face_radius`: The radius of the clock face.
`hand_length_ratio`: List containing the length ratios of the hour, minute, and second hands relative to the face radius.
"""
clock = Solid()
clock_face = Solid()
hour_marks = Solid()
minute_marks = Solid()
hands = Drawing()
hour_hand = Drawing()
minute_hand = Drawing()
second_hand = Drawing()
clock.clock_face = clock_face
clock.hour_marks = hour_marks
clock.minute_marks = minute_marks
clock.hands = hands
hands.hour_hand = hour_hand
hands.minute_hand = minute_hand
hands.second_hand = second_hand
# Clock Face
clock_face.face = Circle((0, 0), face_radius)
# Hour Marks
hour_mark_length = face_radius * 0.1
for i in range(12):
angle = i * (360 / 12)
x = face_radius * cos(radians(angle))
y = face_radius * sin(radians(angle))
hour_marks.__setattr__(f"hour_mark_{i+1}", Rectangle((x, y), 0.1*inches, hour_mark_length))
# Minute Marks
minute_mark_length = face_radius * 0.05
for i in range(60):
angle = i * (360 / 60)
x = face_radius * cos(radians(angle))
y = face_radius * sin(radians(angle))
minute_marks.__setattr__(f"minute_mark_{i+1}", Rectangle((x, y), 0.05*inches, minute_mark_length))
# Clock Hands
hour_hand_length = face_radius * hand_length_ratio[0]
minute_hand_length = face_radius * hand_length_ratio[1]
second_hand_length = face_radius * hand_length_ratio[2]
hour_hand.hand = Line((0, 0), (0, hour_hand_length))
minute_hand.hand = Line((0, 0), (0, minute_hand_length))
second_hand.hand = Line((0, 0), (0, second_hand_length))
return clock
with AIDL_2D:
model = clock()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a clock
Sure! Let's define the features of the clock we want to generate. Here is a basic plan:
1. **Clock Face**: A circular face for the clock.
2. **Hour Marks**: 12 hour marks represented by small rectangles.
3. **Minute Marks**: 60 minute marks represented by smaller rectangles.
4. **Hands**: Separate hands for hours, minutes, and seconds (which could be drawn with lines).
With these features in mind, we can start writing the AIDL program.
### Step-by-Step Breakdown
#### 1. Define the Clock Face
We'll start by creating a `Solid` structure for the clock face and adding a `Circle` to represent the face.
#### 2. Add Hour Marks
Next, we'll add `Solid` structures for each hour mark.
#### 3. Add Minute Marks
We'll create a `Solid` structure for each minute mark.
#### 4. Add Clock Hands
We'll add `Drawing` structures for the hour, minute, and second hands, and use `Line` geometry to define them.
Here is the complete AIDL program:
```python
from AIDL import *
def clock(face_radius: float = 4*inches, hand_length_ratio: list = [0.5, 0.8, 0.9]):
"""
Creates a simple clock model with a circular face, hour marks, minute marks, and hands.
`face_radius`: The radius of the clock face.
`hand_length_ratio`: List containing the length ratios of the hour, minute, and second hands relative to the face radius.
"""
clock = Solid()
clock_face = Solid()
hour_marks = Solid()
minute_marks = Solid()
hands = Drawing()
hour_hand = Drawing()
minute_hand = Drawing()
second_hand = Drawing()
clock.clock_face = clock_face
clock.hour_marks = hour_marks
clock.minute_marks = minute_marks
clock.hands = hands
hands.hour_hand = hour_hand
hands.minute_hand = minute_hand
hands.second_hand = second_hand
# Clock Face
clock_face.face = Circle((0, 0), face_radius)
# Hour Marks
hour_mark_length = face_radius * 0.1
for i in range(12):
angle = i * (360 / 12)
x = face_radius * cos(radians(angle))
y = face_radius * sin(radians(angle))
hour_marks.__setattr__(f"hour_mark_{i+1}", Rectangle((x, y), 0.1*inches, hour_mark_length))
# Minute Marks
minute_mark_length = face_radius * 0.05
for i in range(60):
angle = i * (360 / 60)
x = face_radius * cos(radians(angle))
y = face_radius * sin(radians(angle))
minute_marks.__setattr__(f"minute_mark_{i+1}", Rectangle((x, y), 0.05*inches, minute_mark_length))
# Clock Hands
hour_hand_length = face_radius * hand_length_ratio[0]
minute_hand_length = face_radius * hand_length_ratio[1]
second_hand_length = face_radius * hand_length_ratio[2]
hour_hand.hand = Line((0, 0), (0, hour_hand_length))
minute_hand.hand = Line((0, 0), (0, minute_hand_length))
second_hand.hand = Line((0, 0), (0, second_hand_length))
return clock
with AIDL_2D:
model = clock()
print(model.Solve())
model.Render()
```
### Explanation
- The `clock` function creates a clock model with a specified face radius and hand length ratios.
- It creates substructures for the clock face, hour marks, minute marks, and hands.
- The `hour_marks` and `minute_marks` are added as `Rectangle` geometries positioned around the clock face.
- The hands (`hour_hand`, `minute_hand`, `second_hand`) are added as `Line` geometry.
If you want to modify or add more features, feel free to specify!
|