-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy paththreeDmodelturtle.py
More file actions
128 lines (115 loc) · 4.86 KB
/
threeDmodelturtle.py
File metadata and controls
128 lines (115 loc) · 4.86 KB
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env python
import math
from openscad import *
class threeDmodelturtle:
def __init__(self,
size = 5,
turtle = sphere,
xpos = 0,
ypos = 0,
zpos = 0,
XYdir = 0,
Zdir = 0
):
self.xpos = xpos
self.ypos = ypos
self.zpos = zpos
self.XYdir = XYdir
self.Zdir = Zdir
self.xpast = 0
self.ypast = 0
self.zpast = 0
self.size = size
self.turtle = turtle
self.model = sphere(0.000000001)
def left(self, angle):
self.XYdir = self.XYdir + angle
if self.XYdir > 360 :
self.XYdir = self.XYdir - 360
def right(self, angle):
self.XYdir = self.XYdir + (360 - angle)
if self.XYdir < 360 :
self.XYdir = self.XYdir + 360
def incline(self, angle):
self.Zdir = self.Zdir + angle
if self.Zdir > 180 :
self.Zdir = self.Zdir - 180
self.Zdir = self.Zdir * -1
def decline(self, angle):
print(self.Zdir)
self.Zdir = self.Zdir - angle
if self.Zdir < -180 :
self.Zdir = self.Zdir + 180
self.Zdir = self.Zdir * -1
if self.Zdir == 180 :
self.Zdir = 0
print(self.Zdir)
def forward(self, steps):
if self.turtle == sphere :
tortoise = sphere(self.size/2)
pastturtle = tortoise.translate([self.xpos, self.ypos, self.zpos])
xpast = self.xpos
ypast = self.ypos
zpast = self.zpos
dot = sphere(self.size/4)
if self.XYdir == 0 :
self.xpos = self.xpos + steps
if (self.XYdir > 0 and self.XYdir <90) :
self.xpos = self.xpos + math.cos(math.radians(self.XYdir)) * steps
self.ypos = self.ypos + math.sin(math.radians(self.XYdir)) * steps
if self.XYdir == 90 :
self.ypos = self.ypos + steps
if (self.XYdir > 90 and self.XYdir <180) :
self.xpos = self.xpos + math.sin(math.radians(90 - self.XYdir)) * steps
self.ypos = self.ypos + math.cos(math.radians(90 - self.XYdir)) * steps
if self.XYdir == 180 :
self.xpos = self.xpos - steps
if (self.XYdir > 180 and self.XYdir <270) :
self.xpos = self.xpos - math.cos(math.radians(180 - self.XYdir)) * steps
self.ypos = self.ypos + math.sin(math.radians(180 - self.XYdir)) * steps
if self.XYdir == 270 :
self.ypos = self.ypos - steps
if (self.XYdir > 270 and self.XYdir <360) :
self.xpos = self.xpos - math.sin(math.radians(270 - self.XYdir)) * steps
self.ypos = self.ypos - math.cos(math.radians(270 - self.XYdir)) * steps
if (self.Zdir == 0) :
self.zpos = self.zpos
if (self.Zdir > 0 and self.Zdir <90) :
self.zpos = self.zpos + steps * Sin(self.Zdir)
if (self.Zdir == 90) :
self.zpos = self.zpos + steps
if (self.Zdir > 90 and self.Zdir <180) :
self.zpos = self.zpos + steps * Sin(self.Zdir)
if (self.Zdir == 180) :
self.zpos = self.zpos
if (self.Zdir < 0 and self.Zdir >-90) :
self.zpos = self.zpos + steps * Sin(self.Zdir)
if (self.Zdir == -90) :
self.zpos = self.zpos - steps
if (self.Zdir <-90 and self.Zdir >-180) :
self.zpos = self.zpos + steps * Sin(self.Zdir)
futureturtle = tortoise.translate([self.xpos, self.ypos, self.zpos])
path = hull(dot.translate([xpast, ypast, zpast]), dot.translate([self.xpos, self.ypos, self.zpos]))
self.model = self.model.union(pastturtle, path, futureturtle)
def climb(self,steps):
if self.turtle == sphere :
tortoise = sphere(self.size/2)
zpast = self.zpos
pastturtle = tortoise.translate([self.xpos, self.ypos, self.zpos])
dot = sphere(self.size/4)
self.zpos = self.zpos + steps
futureturtle = tortoise.translate([self.xpos, self.ypos, self.zpos])
path = hull(dot.translate([self.xpos, self.ypos, zpast]), dot.translate([self.xpos, self.ypos, self.zpos]))
self.model = self.model.union(pastturtle, path, futureturtle)
def descend(self,steps):
if self.turtle == sphere :
tortoise = sphere(self.size/2)
zpast = self.zpos
pastturtle = tortoise.translate([self.xpos, self.ypos, self.zpos])
dot = sphere(self.size/4)
self.zpos = self.zpos - steps
futureturtle = tortoise.translate([self.xpos, self.ypos, self.zpos])
path = hull(dot.translate([self.xpos, self.ypos, zpast]), dot.translate([self.xpos, self.ypos, self.zpos]))
self.model = self.model.union(pastturtle, path, futureturtle)
def showmodel(self):
show(self.model)