-
Notifications
You must be signed in to change notification settings - Fork 0
/
Location.py
147 lines (129 loc) · 4.74 KB
/
Location.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
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
def reverse_array(array):
for i in range(len(array)):
if (i % 2) == 0:
# the index of the array is odd
pass
else:
# reverse the array with even index
array[i].reverse()
return array
def array_match(base, change):
"""
:param base: base array that has a specific column length
:param change: array that changes column length to match base array
:return: new changed array that has same column length as base array
"""
for i in range(len(base)):
base_len = len(base[i])
change_len = len(change[i])
if base_len == change_len:
pass
else:
minimum = min(base_len, change_len)
if minimum == base_len:
change[i] = change[i][:minimum]
else:
base[i] = base[i][:minimum]
return base, change
def array_manage(baseDistance, newDistance):
"""
:param baseDistance: list of old distance
:param newDistance: list of new distance
:return: list of people data
"""
peopledata = list()
for ls in range(len(baseDistance)):
tem = []
for element in range(len(baseDistance[ls])):
# the value of new distance must be small than the vector space distance.
difference = baseDistance[ls][element] - newDistance[ls][element]
if difference > 5:
tem.append(1)
else:
tem.append(0)
peopledata.append(tem)
return peopledata
def make_2D(peopleData, newDistance):
"""
:param peopleData: list of locations where people area
:param newDistance: list of new distances
:return: a tuple that contains (x,y) --> will be plotted on GUI
"""
import math
tilt_angles = [20, 40, 60, 80, 20, 40, 60, 80]
rotate_angles = []
projected = []
points = []
x_var = []
y_var = []
for elements in range(0, 180, 3):
rotate_angles.append(elements)
for i in range(len(baseDistance)):
data = peopleData[i]
if data == 0:
pass
else: # data == 1
temp = []
for distance in newDistance[i]:
z = distance * math.cos(math.radians(tilt_angles[i]))
temp.append(z)
projected.append(temp)
for r in range(len(rotate_angles)):
for d in range(len(projected)):
x = projected[d][r] * math.sin(math.radians(rotate_angles[r]))
y = projected[d][r] * math.cos(math.radians(rotate_angles[r]))
x_var.append(x)
y_var.append(y)
return x_var, y_var
if __name__ == '__main__':
# creating an array
# there must be 8 sub-arrays in one array
from random import randint
baseDistance = []
detected = []
for i in range(8):
temp_b = []
temp_dec = []
var = 10
for j in range(60):
temp_b.append(var)
temp_dec.append(randint(0,var))
var += 10
baseDistance.append(temp_b)
detected.append(temp_dec)
print("length of base " + str(len(baseDistance)))
print(len(baseDistance[0]))
print(baseDistance)
print("length of detected " + str(len(detected)))
print(len(detected[0]))
print(detected)
"""
baseDistance = [[10, 10, 10, 10, 10, 10, 10, 10], [20, 20, 20, 20, 20, 20, 20, 20],
[30, 30, 30, 30, 30, 30, 30, 30], [40, 40, 40, 40, 40, 40, 40, 40],
[40, 40, 40, 40, 40, 40, 40, 40], [40, 40, 40, 40, 40, 40, 40, 40],
[40, 40, 40, 40, 40, 40, 40, 40], [40, 40, 40, 40, 40, 40, 40, 40]] # The original box detection
detected = [[1, 1, 5, 7, 3, 10, 3, 4, 6, 8], [20, 20, 20, 18, 10, 5, 2], [5, 2, 4, 7, 30], [12, 40, 40],
[20, 20, 20, 18, 10, 5, 2], [20, 20, 20, 18, 10, 5, 2], [20, 20, 20, 18, 10, 5, 2],
[20, 20, 20, 18, 10, 5, 2]] # The detected distance
"""
newDistance = reverse_array(detected)
print("===reverse even array to match arduino program===")
print(newDistance)
aftermatch = array_match(baseDistance, newDistance)
newb = aftermatch[0]
newd = aftermatch[1]
print("===after array match===")
print(newb)
print(newd)
print("===finding whether there is a change in distance===")
peopleData = array_manage(newb, newd)
print(peopleData)
print("===creating a 2d graph===")
data_transmit = make_2D(peopleData, newd)
print(data_transmit)
x_var = data_transmit[0]
y_var = data_transmit[1]
print("===Plotting the points===")
import matplotlib.pyplot as plt
plt.scatter(x_var,y_var)
plt.show()