-
Notifications
You must be signed in to change notification settings - Fork 3
/
viewer_b.py
91 lines (79 loc) · 2.97 KB
/
viewer_b.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/usr/bin/python
#-*- coding: utf-8 -*-
import turtle
import math
import tkinter
class Viewer:
def __init__(self):
turtle.penup()
self.l_vessel = 50 # Metade do comprimento da embarcacao
#first we initialize the turtle settings
turtle.speed(0)
turtle.mode('logo')
turtle.setworldcoordinates(5000, 2000, 13000, 7000)
turtle.setup()
# turtle.screensize(4000, 4000, 'white')
w_vessel = 5 # Metade da largura da embarcacao
turtle.register_shape('vessel', (
(0, self.l_vessel), (w_vessel, self.l_vessel / 2), (w_vessel, -self.l_vessel), (-w_vessel, -self.l_vessel),
(-w_vessel, self.l_vessel / 2)))
turtle.register_shape('rudder', ((-1, 0), (1, 0), (1, -10), (-1, -10)))
turtle.degrees()
#
self.vessel = turtle.Turtle()
self.vessel.shape('vessel')
self.vessel.fillcolor('red')
self.vessel.penup()
self.rudder = turtle.Turtle()
self.rudder.shape('rudder')
self.rudder.fillcolor('green')
self.rudder.penup()
self.step_count = 0
self.steps_for_stamp = 30
def plot_position(self, x, y, theta, rud_angle):
angle = 90 -theta
# turtle.fillcolor('green')
self.vessel.setpos(x, y)
self.vessel.setheading(angle)
self.rudder.setpos(x - self.l_vessel * math.cos(math.pi * angle / 180),
y - self.l_vessel * math.sin(math.pi * angle / 180))
self.rudder.setheading(angle + rud_angle)
self.vessel.pendown()
def plot_guidance_line(self, point_a, point_b):
self.vessel.setpos(point_a[0], point_a[1])
self.vessel.pendown()
self.vessel.setpos(point_b[0], point_b[1])
self.vessel.penup()
def plot_goal(self, point, factor):
turtle.speed(0)
turtle.setpos(point[0] - factor, point[1] - factor)
turtle.pendown()
turtle.fillcolor('red')
turtle.begin_fill()
turtle.setpos(point[0] - factor, point[1] + factor)
turtle.setpos(point[0] + factor, point[1] + factor)
turtle.setpos(point[0] + factor, point[1] - factor)
turtle.end_fill()
turtle.penup()
def plot_boundary(self, points_list):
turtle.speed(0)
turtle.setpos(points_list[0][0], points_list[0][1])
turtle.pendown()
turtle.fillcolor('blue')
turtle.begin_fill()
for point in points_list:
turtle.setpos(point[0], point[1])
turtle.end_fill()
turtle.penup()
def freeze_screen(self, ):
turtle.mainloop()
def end_episode(self, ):
self.vessel.penup()
self.rudder.penup()
def restart_plot(self):
self.vessel.pendown()
if __name__ == '__main__':
viewer = Viewer()
viewer.plot_guidance_line((0, 0), (500, 0))
viewer.plot_position(100, 20, 20, 10)
viewer.freeze_scream()