A conversion of PlayfulJS's javascript raycaster into Python/Pygame - Mekire/pygame-raycasting-experiment. The Python-Node lets you create Python script that can affect the MASH network. Some general examples using the Python-node in MASH. When you create a new Python Node, a default script shows up in the editor, which reads the MASH network data into a class called “md”.
import numpy as np |
import math |
# pythran export bench_rays(float32[:,:]) |
deffaster_bilinear(Z, x0, y0): |
i, j =int(math.floor(x0)), int(math.floor(y0)) |
XT, YT= (x0 - i), (y0 - j) |
result = (1-YT) * (1-XT) * Z[i, j] |
nx, ny = Z.shape |
if i +1< nx: |
result = result + (1-YT) *XT* Z[i +1, j] |
if j +1< ny: |
result = result +YT* (1-XT) * Z[i, j +1] |
if i +1< nx and j +1< ny: |
result = result +YT*XT* Z[i +1, j +1] |
return result |
defbench_rays(volcano): |
volcanoshadow = np.ones_like(volcano) |
sunangle =45. /180. * np.pi |
angle =-90. /180. * np.pi |
diffangle =90. /180. * np.pi |
nangles =25 |
anglebreaks = np.tan(np.linspace(angle, diffangle, nangles, endpoint=True)) |
maxdistance =int(np.floor(np.sqrt(float(volcano.shape[0] **2+ volcano.shape[1] **2))) +1) |
sinsun, cossun = np.sin(sunangle), np.cos(sunangle) # does pythran have sincos? |
for i inrange(0, volcano.shape[0]): |
for j inrange(0, volcano.shape[1]): |
vij = volcano[i, j] |
for anglei in anglebreaks: |
for k inrange(1, maxdistance): |
xcoord = (i + sinsun * k) |
ycoord = (j + cossun * k) |
if (xcoord >= volcano.shape[0] -1or |
ycoord >= volcano.shape[1] -1or |
xcoord <0or ycoord <0): |
break |
else: |
tanangheight = vij + anglei * k |
cx, cy =int(math.ceil(xcoord)), int(math.ceil(ycoord)) |
fx, fy =int(math.floor(xcoord)), int(math.floor(ycoord)) |
if (volcano[cx, cy] < tanangheight or |
volcano[fx, cy] < tanangheight or |
volcano[cx, fy] < tanangheight or |
volcano[fx, fy] < tanangheight): |
continue |
if tanangheight < faster_bilinear(volcano, xcoord, ycoord): |
volcanoshadow[i, j] = volcanoshadow[i, j] -1/ nangles |
break |
return volcanoshadow |
# if __name__ '__main__': |
# import numpy as np |
# import matplotlib.pyplot as plt |
# volcano = np.loadtxt(open('/home/wolfv//Downloads/volcano.csv', 'rb'), delimiter=',', dtype=np.float32, skiprows=1, usecols=range(1, 62)) |
# print(volcano) |
# shade = bench_rays(volcano) |
# print(shade) |
# plt.imshow(shade.T, origin='lower') |
# plt.show() |
V1 | V2 | V3 | V4 | V5 | V6 | V7 | V8 | V9 | V10 | V11 | V12 | V13 | V14 | V15 | V16 | V17 | V18 | V19 | V20 | V21 | V22 | V23 | V24 | V25 | V26 | V27 | V28 | V29 | V30 | V31 | V32 | V33 | V34 | V35 | V36 | V37 | V38 | V39 | V40 | V41 | V42 | V43 | V44 | V45 | V46 | V47 | V48 | V49 | V50 | V51 | V52 | V53 | V54 | V55 | V56 | V57 | V58 | V59 | V60 | V61 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 100 | 100 | 101 | 101 | 101 | 101 | 101 | 100 | 100 | 100 | 101 | 101 | 102 | 102 | 102 | 102 | 103 | 104 | 103 | 102 | 101 | 101 | 102 | 103 | 104 | 104 | 105 | 107 | 107 | 107 | 108 | 108 | 110 | 110 | 110 | 110 | 110 | 110 | 110 | 110 | 108 | 108 | 108 | 107 | 107 | 108 | 108 | 108 | 108 | 108 | 107 | 107 | 107 | 107 | 106 | 106 | 105 | 105 | 104 | 104 | 103 |
2 | 101 | 101 | 102 | 102 | 102 | 102 | 102 | 101 | 101 | 101 | 102 | 102 | 103 | 103 | 103 | 103 | 104 | 105 | 104 | 103 | 102 | 102 | 103 | 105 | 106 | 106 | 107 | 109 | 110 | 110 | 110 | 110 | 111 | 112 | 113 | 114 | 116 | 115 | 114 | 112 | 110 | 110 | 110 | 109 | 108 | 109 | 109 | 109 | 109 | 108 | 108 | 108 | 108 | 107 | 107 | 106 | 106 | 105 | 105 | 104 | 104 |
3 | 102 | 102 | 103 | 103 | 103 | 103 | 103 | 102 | 102 | 102 | 103 | 103 | 104 | 104 | 104 | 104 | 105 | 106 | 105 | 104 | 104 | 105 | 106 | 107 | 108 | 110 | 111 | 113 | 114 | 115 | 114 | 115 | 116 | 118 | 119 | 119 | 121 | 121 | 120 | 118 | 116 | 114 | 112 | 111 | 110 | 110 | 110 | 110 | 109 | 109 | 109 | 109 | 108 | 108 | 107 | 107 | 106 | 106 | 105 | 105 | 104 |
4 | 103 | 103 | 104 | 104 | 104 | 104 | 104 | 103 | 103 | 103 | 103 | 104 | 104 | 104 | 105 | 105 | 106 | 107 | 106 | 106 | 106 | 107 | 108 | 110 | 111 | 114 | 117 | 118 | 117 | 119 | 120 | 121 | 122 | 124 | 125 | 126 | 127 | 127 | 126 | 124 | 122 | 120 | 117 | 116 | 113 | 111 | 110 | 110 | 110 | 109 | 109 | 109 | 109 | 108 | 108 | 107 | 107 | 106 | 106 | 105 | 105 |
5 | 104 | 104 | 105 | 105 | 105 | 105 | 105 | 104 | 104 | 103 | 104 | 104 | 105 | 105 | 105 | 106 | 107 | 108 | 108 | 108 | 109 | 110 | 112 | 114 | 115 | 118 | 121 | 122 | 121 | 123 | 128 | 131 | 129 | 130 | 131 | 131 | 132 | 132 | 131 | 130 | 128 | 126 | 122 | 119 | 115 | 114 | 112 | 110 | 110 | 110 | 110 | 110 | 109 | 109 | 108 | 107 | 107 | 107 | 106 | 106 | 105 |
6 | 105 | 105 | 105 | 106 | 106 | 106 | 106 | 105 | 105 | 104 | 104 | 105 | 105 | 106 | 106 | 107 | 109 | 110 | 110 | 112 | 113 | 115 | 116 | 118 | 119 | 121 | 124 | 126 | 126 | 129 | 134 | 137 | 137 | 136 | 136 | 135 | 136 | 136 | 136 | 135 | 133 | 129 | 126 | 122 | 118 | 116 | 115 | 113 | 111 | 110 | 110 | 110 | 110 | 109 | 108 | 108 | 108 | 107 | 107 | 106 | 106 |
7 | 105 | 106 | 106 | 107 | 107 | 107 | 107 | 106 | 106 | 105 | 105 | 106 | 106 | 107 | 108 | 109 | 111 | 113 | 114 | 116 | 118 | 120 | 121 | 122 | 123 | 125 | 127 | 129 | 130 | 135 | 140 | 142 | 142 | 142 | 141 | 140 | 140 | 140 | 140 | 139 | 137 | 134 | 129 | 125 | 121 | 118 | 116 | 114 | 112 | 110 | 110 | 110 | 111 | 110 | 109 | 109 | 108 | 108 | 107 | 107 | 106 |
8 | 106 | 107 | 107 | 108 | 108 | 108 | 108 | 107 | 107 | 106 | 106 | 107 | 108 | 108 | 110 | 113 | 115 | 117 | 118 | 120 | 122 | 124 | 125 | 127 | 128 | 129 | 131 | 134 | 135 | 141 | 146 | 147 | 146 | 146 | 145 | 144 | 144 | 144 | 143 | 142 | 141 | 139 | 135 | 130 | 126 | 122 | 118 | 116 | 114 | 112 | 112 | 113 | 112 | 110 | 110 | 109 | 109 | 108 | 108 | 107 | 106 |
9 | 107 | 108 | 108 | 109 | 109 | 109 | 109 | 108 | 108 | 107 | 108 | 108 | 110 | 111 | 113 | 116 | 118 | 120 | 123 | 125 | 127 | 129 | 130 | 132 | 134 | 135 | 137 | 139 | 142 | 146 | 152 | 152 | 151 | 151 | 150 | 149 | 148 | 148 | 146 | 145 | 143 | 142 | 139 | 135 | 131 | 127 | 122 | 119 | 117 | 115 | 115 | 115 | 114 | 112 | 110 | 110 | 109 | 109 | 108 | 107 | 107 |
10 | 108 | 109 | 109 | 110 | 110 | 110 | 110 | 109 | 109 | 108 | 110 | 110 | 113 | 116 | 118 | 120 | 122 | 125 | 127 | 129 | 133 | 136 | 138 | 140 | 141 | 142 | 148 | 150 | 151 | 156 | 158 | 159 | 158 | 157 | 158 | 158 | 154 | 151 | 149 | 148 | 146 | 144 | 141 | 137 | 134 | 130 | 125 | 122 | 120 | 118 | 117 | 117 | 115 | 113 | 111 | 110 | 110 | 109 | 108 | 107 | 107 |
11 | 109 | 110 | 110 | 111 | 111 | 111 | 111 | 110 | 110 | 110 | 112 | 114 | 118 | 121 | 123 | 125 | 127 | 129 | 133 | 137 | 141 | 143 | 145 | 146 | 148 | 150 | 154 | 156 | 159 | 161 | 162 | 163 | 164 | 163 | 164 | 164 | 160 | 157 | 154 | 151 | 149 | 146 | 144 | 140 | 137 | 133 | 129 | 126 | 124 | 121 | 119 | 118 | 116 | 114 | 112 | 111 | 110 | 109 | 108 | 107 | 106 |
12 | 110 | 110 | 111 | 113 | 112 | 111 | 113 | 112 | 112 | 114 | 116 | 119 | 121 | 124 | 127 | 129 | 133 | 138 | 143 | 146 | 149 | 149 | 151 | 153 | 154 | 157 | 159 | 160 | 163 | 165 | 166 | 167 | 168 | 168 | 168 | 168 | 166 | 162 | 159 | 157 | 154 | 152 | 149 | 144 | 140 | 136 | 133 | 131 | 128 | 125 | 122 | 119 | 117 | 115 | 113 | 111 | 110 | 109 | 108 | 107 | 106 |
13 | 110 | 111 | 113 | 115 | 114 | 113 | 114 | 114 | 115 | 117 | 119 | 121 | 124 | 126 | 129 | 133 | 140 | 145 | 150 | 154 | 155 | 155 | 157 | 159 | 161 | 162 | 164 | 165 | 167 | 168 | 169 | 170 | 172 | 174 | 172 | 172 | 171 | 169 | 166 | 163 | 161 | 158 | 153 | 148 | 143 | 140 | 137 | 134 | 131 | 128 | 125 | 120 | 118 | 116 | 114 | 112 | 110 | 109 | 108 | 107 | 105 |
14 | 111 | 113 | 115 | 117 | 116 | 115 | 116 | 117 | 117 | 119 | 121 | 124 | 126 | 128 | 132 | 137 | 143 | 151 | 156 | 161 | 161 | 162 | 163 | 165 | 166 | 167 | 168 | 170 | 171 | 173 | 175 | 177 | 179 | 178 | 177 | 176 | 176 | 174 | 171 | 169 | 165 | 161 | 156 | 152 | 148 | 144 | 140 | 138 | 135 | 131 | 127 | 123 | 119 | 117 | 115 | 113 | 111 | 110 | 108 | 106 | 105 |
15 | 114 | 115 | 117 | 117 | 117 | 118 | 119 | 119 | 120 | 121 | 124 | 126 | 128 | 131 | 137 | 143 | 150 | 156 | 160 | 163 | 165 | 168 | 170 | 171 | 172 | 173 | 174 | 175 | 177 | 179 | 180 | 182 | 183 | 183 | 183 | 183 | 180 | 178 | 177 | 172 | 168 | 164 | 160 | 156 | 152 | 148 | 144 | 141 | 138 | 134 | 130 | 126 | 121 | 117 | 114 | 112 | 110 | 110 | 108 | 106 | 104 |
16 | 116 | 118 | 118 | 118 | 120 | 121 | 121 | 122 | 122 | 123 | 125 | 128 | 130 | 134 | 141 | 147 | 152 | 156 | 160 | 165 | 168 | 170 | 174 | 176 | 179 | 180 | 181 | 181 | 182 | 182 | 183 | 184 | 186 | 187 | 187 | 184 | 184 | 181 | 180 | 176 | 172 | 168 | 165 | 161 | 157 | 153 | 149 | 145 | 142 | 138 | 133 | 129 | 125 | 120 | 115 | 111 | 110 | 110 | 108 | 106 | 104 |
17 | 118 | 120 | 120 | 121 | 122 | 123 | 124 | 124 | 125 | 126 | 127 | 129 | 132 | 135 | 142 | 149 | 153 | 157 | 161 | 166 | 170 | 174 | 178 | 180 | 182 | 183 | 184 | 184 | 185 | 186 | 186 | 187 | 189 | 189 | 189 | 189 | 189 | 186 | 182 | 179 | 175 | 171 | 168 | 165 | 162 | 157 | 152 | 149 | 145 | 141 | 137 | 131 | 125 | 120 | 116 | 111 | 110 | 110 | 108 | 106 | 104 |
18 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 127 | 128 | 130 | 132 | 134 | 137 | 142 | 151 | 155 | 158 | 162 | 169 | 172 | 176 | 181 | 183 | 184 | 186 | 187 | 188 | 189 | 189 | 189 | 189 | 190 | 190 | 191 | 190 | 190 | 188 | 186 | 183 | 180 | 175 | 171 | 168 | 165 | 161 | 157 | 152 | 149 | 145 | 141 | 134 | 127 | 121 | 116 | 112 | 110 | 110 | 108 | 106 | 104 |
19 | 120 | 122 | 125 | 126 | 126 | 127 | 128 | 129 | 130 | 130 | 132 | 134 | 136 | 139 | 145 | 152 | 157 | 160 | 167 | 172 | 175 | 178 | 181 | 185 | 186 | 188 | 190 | 191 | 192 | 193 | 193 | 192 | 192 | 191 | 192 | 191 | 191 | 190 | 190 | 187 | 184 | 181 | 177 | 172 | 169 | 165 | 161 | 156 | 152 | 147 | 143 | 139 | 131 | 123 | 119 | 115 | 111 | 110 | 108 | 106 | 105 |
20 | 121 | 124 | 126 | 128 | 129 | 129 | 130 | 131 | 132 | 133 | 135 | 137 | 139 | 143 | 150 | 154 | 159 | 164 | 170 | 173 | 176 | 179 | 184 | 186 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 194 | 193 | 192 | 191 | 191 | 191 | 191 | 190 | 190 | 188 | 184 | 181 | 177 | 173 | 169 | 165 | 160 | 155 | 149 | 145 | 142 | 136 | 129 | 123 | 118 | 114 | 110 | 108 | 108 | 107 |
21 | 122 | 125 | 127 | 130 | 130 | 131 | 133 | 134 | 135 | 136 | 137 | 140 | 143 | 147 | 154 | 158 | 162 | 166 | 171 | 174 | 177 | 181 | 186 | 189 | 190 | 190 | 191 | 192 | 191 | 191 | 190 | 189 | 188 | 189 | 190 | 190 | 191 | 190 | 190 | 190 | 189 | 186 | 184 | 181 | 177 | 173 | 169 | 164 | 158 | 152 | 148 | 144 | 140 | 134 | 125 | 118 | 115 | 111 | 110 | 108 | 107 |
22 | 122 | 125 | 128 | 130 | 132 | 133 | 135 | 136 | 137 | 139 | 140 | 143 | 147 | 152 | 157 | 161 | 164 | 168 | 172 | 175 | 179 | 182 | 186 | 190 | 190 | 190 | 190 | 189 | 187 | 184 | 184 | 183 | 182 | 182 | 183 | 183 | 183 | 184 | 185 | 186 | 187 | 186 | 185 | 184 | 181 | 177 | 173 | 169 | 163 | 157 | 149 | 145 | 141 | 136 | 130 | 119 | 116 | 112 | 110 | 108 | 106 |
23 | 123 | 126 | 129 | 131 | 133 | 135 | 137 | 138 | 139 | 141 | 143 | 147 | 150 | 156 | 161 | 164 | 167 | 170 | 173 | 177 | 181 | 184 | 187 | 188 | 190 | 189 | 187 | 185 | 183 | 179 | 176 | 174 | 174 | 174 | 174 | 174 | 176 | 177 | 179 | 180 | 182 | 183 | 182 | 181 | 181 | 180 | 176 | 171 | 166 | 160 | 152 | 147 | 142 | 138 | 133 | 126 | 121 | 115 | 110 | 106 | 105 |
24 | 124 | 127 | 130 | 132 | 135 | 137 | 138 | 140 | 142 | 144 | 147 | 149 | 154 | 157 | 161 | 165 | 168 | 171 | 175 | 178 | 181 | 184 | 186 | 187 | 187 | 184 | 184 | 181 | 179 | 175 | 171 | 169 | 168 | 168 | 168 | 169 | 170 | 172 | 174 | 177 | 178 | 179 | 180 | 181 | 181 | 180 | 179 | 174 | 167 | 161 | 155 | 148 | 144 | 139 | 134 | 128 | 121 | 115 | 110 | 106 | 105 |
25 | 123 | 128 | 131 | 133 | 136 | 138 | 140 | 142 | 144 | 146 | 149 | 151 | 154 | 157 | 160 | 164 | 168 | 172 | 175 | 178 | 181 | 183 | 184 | 184 | 185 | 183 | 180 | 177 | 174 | 170 | 167 | 165 | 164 | 164 | 164 | 165 | 166 | 168 | 171 | 175 | 176 | 178 | 180 | 181 | 180 | 180 | 179 | 177 | 170 | 163 | 157 | 150 | 144 | 139 | 134 | 128 | 121 | 115 | 110 | 108 | 107 |
26 | 123 | 127 | 131 | 134 | 136 | 138 | 140 | 142 | 144 | 147 | 149 | 151 | 154 | 157 | 160 | 164 | 168 | 171 | 174 | 178 | 180 | 181 | 181 | 182 | 183 | 181 | 178 | 173 | 169 | 166 | 163 | 161 | 161 | 160 | 160 | 161 | 163 | 165 | 168 | 173 | 176 | 178 | 179 | 180 | 181 | 180 | 180 | 175 | 173 | 166 | 159 | 152 | 145 | 139 | 134 | 127 | 121 | 115 | 110 | 109 | 108 |
27 | 120 | 124 | 128 | 131 | 134 | 137 | 139 | 142 | 144 | 146 | 149 | 151 | 153 | 156 | 160 | 163 | 167 | 171 | 174 | 178 | 180 | 180 | 180 | 180 | 180 | 180 | 175 | 171 | 167 | 162 | 160 | 158 | 157 | 157 | 157 | 158 | 159 | 162 | 166 | 170 | 175 | 177 | 178 | 180 | 181 | 181 | 180 | 178 | 175 | 169 | 160 | 154 | 148 | 140 | 134 | 128 | 121 | 115 | 110 | 110 | 109 |
28 | 118 | 121 | 125 | 129 | 132 | 134 | 137 | 140 | 142 | 145 | 147 | 149 | 151 | 155 | 159 | 163 | 166 | 169 | 173 | 177 | 179 | 180 | 180 | 180 | 180 | 179 | 174 | 169 | 166 | 161 | 158 | 156 | 154 | 153 | 153 | 154 | 156 | 159 | 163 | 169 | 173 | 175 | 178 | 180 | 181 | 180 | 180 | 179 | 175 | 170 | 160 | 154 | 149 | 142 | 135 | 128 | 122 | 116 | 111 | 110 | 110 |
29 | 117 | 120 | 121 | 125 | 129 | 132 | 135 | 138 | 140 | 143 | 145 | 147 | 149 | 153 | 157 | 160 | 163 | 166 | 171 | 174 | 177 | 179 | 180 | 180 | 180 | 179 | 172 | 168 | 164 | 160 | 157 | 154 | 151 | 149 | 150 | 150 | 154 | 158 | 164 | 169 | 174 | 178 | 180 | 180 | 180 | 180 | 178 | 177 | 175 | 170 | 161 | 153 | 148 | 142 | 135 | 129 | 123 | 116 | 113 | 112 | 110 |
30 | 115 | 118 | 120 | 122 | 126 | 130 | 133 | 136 | 138 | 141 | 143 | 145 | 148 | 151 | 154 | 157 | 160 | 163 | 168 | 171 | 174 | 177 | 179 | 179 | 179 | 176 | 171 | 167 | 164 | 160 | 156 | 153 | 149 | 148 | 149 | 151 | 155 | 158 | 163 | 170 | 173 | 177 | 179 | 180 | 180 | 180 | 178 | 175 | 173 | 171 | 162 | 154 | 147 | 141 | 136 | 130 | 124 | 117 | 115 | 112 | 110 |
31 | 114 | 116 | 118 | 120 | 122 | 127 | 131 | 133 | 136 | 138 | 141 | 143 | 146 | 148 | 151 | 154 | 157 | 160 | 164 | 168 | 171 | 174 | 178 | 178 | 179 | 177 | 173 | 169 | 165 | 161 | 157 | 154 | 151 | 149 | 150 | 152 | 155 | 159 | 166 | 171 | 175 | 177 | 179 | 180 | 180 | 179 | 176 | 174 | 171 | 168 | 159 | 151 | 146 | 141 | 135 | 129 | 124 | 119 | 116 | 113 | 110 |
32 | 115 | 114 | 116 | 118 | 120 | 122 | 127 | 129 | 132 | 136 | 139 | 141 | 143 | 146 | 148 | 151 | 153 | 156 | 160 | 164 | 167 | 172 | 174 | 176 | 177 | 176 | 173 | 170 | 166 | 162 | 159 | 157 | 154 | 153 | 154 | 155 | 158 | 161 | 169 | 172 | 174 | 176 | 178 | 178 | 178 | 178 | 175 | 172 | 169 | 162 | 156 | 149 | 144 | 140 | 134 | 128 | 123 | 118 | 115 | 112 | 110 |
33 | 113 | 113 | 114 | 116 | 118 | 120 | 122 | 125 | 129 | 133 | 136 | 138 | 141 | 143 | 146 | 149 | 150 | 153 | 156 | 160 | 165 | 170 | 173 | 176 | 176 | 176 | 173 | 172 | 169 | 165 | 163 | 160 | 158 | 157 | 158 | 159 | 161 | 166 | 170 | 170 | 173 | 175 | 176 | 178 | 176 | 173 | 171 | 168 | 164 | 158 | 153 | 146 | 140 | 137 | 132 | 127 | 121 | 117 | 113 | 111 | 110 |
34 | 111 | 112 | 113 | 114 | 116 | 118 | 120 | 122 | 126 | 130 | 133 | 136 | 139 | 142 | 145 | 147 | 148 | 151 | 155 | 158 | 163 | 168 | 173 | 176 | 177 | 177 | 176 | 174 | 171 | 169 | 166 | 164 | 161 | 161 | 162 | 164 | 165 | 167 | 170 | 170 | 171 | 173 | 173 | 173 | 170 | 168 | 165 | 163 | 160 | 155 | 149 | 143 | 138 | 134 | 130 | 125 | 119 | 116 | 112 | 110 | 109 |
35 | 110 | 112 | 113 | 113 | 114 | 116 | 118 | 120 | 123 | 127 | 131 | 134 | 137 | 141 | 143 | 145 | 148 | 150 | 154 | 157 | 161 | 166 | 171 | 176 | 178 | 178 | 178 | 176 | 174 | 172 | 170 | 167 | 167 | 167 | 166 | 168 | 170 | 169 | 168 | 167 | 168 | 168 | 168 | 168 | 167 | 165 | 163 | 160 | 156 | 152 | 146 | 140 | 136 | 131 | 128 | 122 | 118 | 114 | 110 | 110 | 109 |
36 | 109 | 110 | 111 | 112 | 114 | 116 | 118 | 119 | 120 | 124 | 128 | 131 | 136 | 140 | 142 | 145 | 147 | 150 | 153 | 157 | 160 | 165 | 170 | 174 | 178 | 179 | 179 | 178 | 178 | 176 | 174 | 171 | 170 | 170 | 170 | 168 | 167 | 166 | 164 | 163 | 161 | 162 | 163 | 163 | 163 | 161 | 160 | 157 | 153 | 148 | 142 | 136 | 130 | 127 | 124 | 120 | 117 | 113 | 110 | 110 | 109 |
37 | 108 | 109 | 111 | 112 | 114 | 116 | 117 | 118 | 120 | 121 | 125 | 128 | 132 | 138 | 142 | 144 | 147 | 149 | 153 | 156 | 160 | 164 | 170 | 174 | 178 | 180 | 180 | 179 | 179 | 178 | 176 | 172 | 170 | 170 | 170 | 168 | 166 | 164 | 162 | 160 | 157 | 156 | 157 | 158 | 158 | 156 | 153 | 151 | 149 | 144 | 139 | 130 | 127 | 124 | 121 | 118 | 115 | 112 | 110 | 110 | 109 |
38 | 108 | 109 | 111 | 113 | 114 | 116 | 117 | 118 | 119 | 120 | 122 | 126 | 130 | 135 | 139 | 143 | 147 | 149 | 152 | 156 | 160 | 164 | 169 | 173 | 177 | 180 | 180 | 180 | 180 | 179 | 178 | 174 | 170 | 170 | 168 | 167 | 165 | 163 | 161 | 157 | 154 | 153 | 152 | 152 | 152 | 149 | 148 | 147 | 144 | 140 | 134 | 128 | 125 | 122 | 119 | 117 | 114 | 110 | 110 | 109 | 109 |
39 | 107 | 108 | 111 | 112 | 114 | 115 | 116 | 117 | 119 | 120 | 121 | 124 | 128 | 133 | 137 | 141 | 145 | 149 | 152 | 156 | 160 | 164 | 168 | 172 | 176 | 179 | 180 | 180 | 180 | 179 | 178 | 174 | 170 | 168 | 166 | 165 | 163 | 161 | 158 | 154 | 150 | 149 | 148 | 146 | 145 | 143 | 143 | 143 | 140 | 136 | 130 | 126 | 123 | 120 | 118 | 115 | 112 | 110 | 110 | 109 | 109 |
40 | 107 | 108 | 110 | 112 | 113 | 113 | 115 | 116 | 118 | 120 | 122 | 125 | 128 | 132 | 136 | 140 | 145 | 148 | 150 | 155 | 160 | 164 | 167 | 170 | 174 | 177 | 179 | 179 | 178 | 176 | 176 | 173 | 169 | 166 | 164 | 163 | 161 | 159 | 155 | 152 | 148 | 145 | 143 | 141 | 140 | 139 | 139 | 138 | 136 | 132 | 128 | 124 | 121 | 118 | 116 | 114 | 111 | 110 | 110 | 109 | 108 |
41 | 107 | 108 | 109 | 111 | 113 | 114 | 116 | 117 | 119 | 120 | 122 | 125 | 128 | 132 | 137 | 141 | 144 | 146 | 149 | 152 | 157 | 162 | 166 | 168 | 171 | 173 | 175 | 175 | 173 | 172 | 172 | 171 | 168 | 165 | 162 | 160 | 158 | 156 | 153 | 149 | 145 | 142 | 139 | 138 | 137 | 136 | 135 | 133 | 131 | 129 | 126 | 122 | 119 | 117 | 114 | 112 | 110 | 110 | 109 | 108 | 107 |
42 | 108 | 109 | 110 | 112 | 114 | 115 | 116 | 117 | 119 | 120 | 122 | 126 | 129 | 133 | 137 | 141 | 143 | 146 | 148 | 151 | 155 | 160 | 164 | 167 | 168 | 169 | 170 | 170 | 169 | 168 | 167 | 168 | 166 | 163 | 160 | 158 | 155 | 153 | 150 | 147 | 143 | 140 | 137 | 136 | 134 | 133 | 132 | 130 | 129 | 127 | 125 | 121 | 118 | 115 | 112 | 110 | 110 | 110 | 108 | 107 | 107 |
43 | 109 | 110 | 111 | 113 | 115 | 116 | 117 | 118 | 120 | 121 | 123 | 126 | 129 | 133 | 138 | 141 | 143 | 146 | 148 | 150 | 155 | 159 | 163 | 165 | 166 | 167 | 168 | 168 | 166 | 165 | 164 | 161 | 160 | 159 | 158 | 155 | 152 | 149 | 147 | 144 | 141 | 138 | 135 | 134 | 132 | 130 | 129 | 128 | 126 | 124 | 122 | 120 | 117 | 113 | 111 | 110 | 110 | 110 | 108 | 107 | 107 |
44 | 110 | 111 | 112 | 113 | 116 | 117 | 118 | 119 | 120 | 122 | 125 | 127 | 130 | 133 | 138 | 141 | 143 | 146 | 148 | 150 | 154 | 159 | 162 | 163 | 164 | 166 | 166 | 166 | 165 | 163 | 161 | 159 | 157 | 156 | 155 | 153 | 150 | 146 | 143 | 140 | 138 | 136 | 133 | 132 | 130 | 129 | 128 | 125 | 124 | 122 | 120 | 119 | 117 | 114 | 111 | 110 | 110 | 109 | 108 | 107 | 107 |
45 | 111 | 112 | 113 | 114 | 116 | 117 | 118 | 119 | 120 | 123 | 125 | 128 | 130 | 134 | 139 | 141 | 144 | 146 | 148 | 151 | 154 | 158 | 161 | 164 | 166 | 167 | 168 | 166 | 165 | 163 | 161 | 158 | 156 | 154 | 152 | 150 | 146 | 142 | 139 | 137 | 135 | 133 | 131 | 130 | 129 | 128 | 127 | 125 | 123 | 121 | 120 | 118 | 116 | 113 | 111 | 110 | 110 | 109 | 108 | 107 | 106 |
46 | 111 | 112 | 113 | 115 | 117 | 118 | 118 | 120 | 121 | 124 | 126 | 128 | 131 | 135 | 139 | 142 | 144 | 146 | 148 | 151 | 155 | 160 | 164 | 165 | 168 | 169 | 169 | 168 | 166 | 163 | 160 | 158 | 156 | 153 | 151 | 148 | 145 | 142 | 139 | 137 | 135 | 132 | 130 | 129 | 127 | 126 | 125 | 124 | 123 | 120 | 120 | 117 | 116 | 114 | 112 | 110 | 110 | 108 | 107 | 106 | 106 |
47 | 112 | 113 | 114 | 116 | 117 | 118 | 119 | 120 | 122 | 124 | 127 | 129 | 132 | 135 | 139 | 142 | 144 | 146 | 149 | 152 | 157 | 162 | 167 | 169 | 170 | 170 | 170 | 168 | 165 | 163 | 161 | 159 | 157 | 155 | 151 | 148 | 145 | 141 | 139 | 136 | 134 | 132 | 130 | 128 | 127 | 126 | 124 | 123 | 122 | 120 | 119 | 117 | 116 | 114 | 112 | 111 | 109 | 107 | 106 | 106 | 105 |
48 | 113 | 114 | 115 | 116 | 117 | 119 | 119 | 120 | 122 | 125 | 127 | 129 | 132 | 135 | 139 | 142 | 144 | 147 | 149 | 154 | 159 | 164 | 169 | 170 | 170 | 170 | 170 | 170 | 168 | 165 | 163 | 161 | 158 | 155 | 151 | 148 | 145 | 142 | 139 | 137 | 135 | 132 | 131 | 128 | 126 | 125 | 124 | 122 | 121 | 120 | 119 | 117 | 115 | 113 | 111 | 110 | 109 | 106 | 105 | 105 | 104 |
49 | 113 | 114 | 115 | 117 | 118 | 119 | 120 | 121 | 123 | 125 | 127 | 130 | 132 | 135 | 139 | 142 | 145 | 148 | 150 | 156 | 161 | 166 | 170 | 170 | 170 | 170 | 170 | 170 | 169 | 166 | 163 | 161 | 159 | 155 | 151 | 148 | 146 | 143 | 140 | 138 | 135 | 134 | 132 | 130 | 127 | 125 | 123 | 121 | 120 | 120 | 119 | 116 | 114 | 112 | 110 | 110 | 108 | 106 | 105 | 104 | 104 |
50 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 123 | 126 | 128 | 130 | 133 | 136 | 139 | 142 | 145 | 148 | 152 | 157 | 161 | 166 | 168 | 170 | 170 | 170 | 170 | 168 | 166 | 164 | 163 | 160 | 159 | 155 | 151 | 148 | 146 | 143 | 141 | 138 | 136 | 134 | 132 | 130 | 128 | 125 | 123 | 121 | 120 | 120 | 118 | 116 | 113 | 111 | 110 | 110 | 109 | 106 | 105 | 104 | 104 |
51 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 121 | 123 | 126 | 128 | 131 | 134 | 136 | 139 | 142 | 145 | 149 | 152 | 157 | 161 | 163 | 164 | 166 | 168 | 167 | 166 | 164 | 163 | 161 | 160 | 158 | 156 | 152 | 149 | 147 | 144 | 143 | 141 | 139 | 136 | 134 | 132 | 130 | 128 | 125 | 122 | 120 | 120 | 119 | 117 | 115 | 113 | 110 | 110 | 109 | 107 | 106 | 105 | 104 | 104 |
52 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 125 | 128 | 131 | 134 | 137 | 139 | 142 | 145 | 149 | 152 | 156 | 159 | 159 | 160 | 162 | 162 | 161 | 161 | 160 | 159 | 158 | 157 | 155 | 153 | 150 | 148 | 146 | 145 | 143 | 142 | 140 | 137 | 134 | 131 | 129 | 126 | 124 | 122 | 120 | 119 | 117 | 115 | 113 | 111 | 110 | 109 | 109 | 107 | 106 | 105 | 104 | 104 |
53 | 114 | 115 | 116 | 116 | 118 | 119 | 120 | 121 | 122 | 126 | 129 | 132 | 135 | 137 | 140 | 143 | 146 | 149 | 152 | 155 | 156 | 157 | 158 | 159 | 159 | 159 | 158 | 158 | 157 | 155 | 153 | 151 | 150 | 149 | 147 | 146 | 145 | 144 | 142 | 141 | 138 | 135 | 132 | 128 | 125 | 122 | 120 | 118 | 117 | 115 | 113 | 112 | 110 | 109 | 108 | 108 | 106 | 105 | 105 | 104 | 104 |
54 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 123 | 126 | 129 | 132 | 135 | 138 | 140 | 143 | 146 | 148 | 151 | 153 | 154 | 156 | 157 | 157 | 157 | 157 | 156 | 155 | 154 | 152 | 150 | 149 | 148 | 147 | 146 | 145 | 144 | 142 | 141 | 140 | 139 | 136 | 132 | 129 | 125 | 121 | 118 | 116 | 115 | 113 | 111 | 110 | 109 | 108 | 108 | 107 | 106 | 105 | 104 | 104 | 104 |
55 | 112 | 113 | 114 | 115 | 116 | 117 | 119 | 120 | 122 | 126 | 130 | 133 | 136 | 138 | 141 | 143 | 146 | 148 | 150 | 152 | 154 | 155 | 155 | 155 | 155 | 155 | 154 | 152 | 152 | 150 | 148 | 147 | 146 | 145 | 145 | 143 | 142 | 141 | 140 | 140 | 140 | 137 | 133 | 129 | 125 | 120 | 117 | 115 | 111 | 110 | 110 | 109 | 108 | 107 | 107 | 106 | 105 | 105 | 104 | 104 | 103 |
56 | 111 | 112 | 114 | 115 | 116 | 117 | 118 | 120 | 122 | 125 | 131 | 134 | 137 | 139 | 142 | 144 | 146 | 148 | 150 | 152 | 153 | 153 | 153 | 153 | 153 | 153 | 153 | 151 | 149 | 147 | 146 | 144 | 144 | 143 | 143 | 142 | 141 | 140 | 140 | 140 | 140 | 138 | 134 | 130 | 123 | 120 | 118 | 111 | 110 | 110 | 110 | 108 | 107 | 106 | 108 | 105 | 105 | 104 | 104 | 103 | 103 |
57 | 111 | 112 | 113 | 115 | 115 | 116 | 117 | 119 | 121 | 126 | 131 | 135 | 138 | 140 | 142 | 144 | 146 | 148 | 150 | 151 | 151 | 151 | 151 | 151 | 151 | 151 | 151 | 150 | 148 | 146 | 144 | 142 | 141 | 141 | 142 | 141 | 140 | 140 | 140 | 140 | 140 | 140 | 136 | 132 | 126 | 120 | 115 | 110 | 110 | 110 | 109 | 107 | 106 | 105 | 107 | 105 | 104 | 104 | 104 | 103 | 103 |
58 | 112 | 113 | 113 | 114 | 115 | 116 | 117 | 119 | 122 | 127 | 132 | 135 | 139 | 141 | 143 | 145 | 147 | 149 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 149 | 147 | 144 | 142 | 141 | 140 | 140 | 140 | 140 | 140 | 140 | 140 | 140 | 140 | 140 | 137 | 133 | 128 | 120 | 117 | 110 | 110 | 110 | 108 | 106 | 105 | 105 | 106 | 105 | 104 | 104 | 103 | 103 | 103 |
59 | 112 | 113 | 114 | 114 | 116 | 117 | 118 | 120 | 122 | 128 | 132 | 136 | 139 | 141 | 144 | 146 | 147 | 149 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 149 | 146 | 143 | 141 | 140 | 140 | 139 | 139 | 139 | 140 | 140 | 140 | 140 | 140 | 140 | 137 | 133 | 129 | 121 | 118 | 110 | 110 | 109 | 107 | 106 | 105 | 105 | 105 | 104 | 104 | 103 | 103 | 103 | 102 |
60 | 112 | 114 | 114 | 115 | 116 | 117 | 119 | 120 | 122 | 128 | 133 | 136 | 140 | 142 | 144 | 146 | 148 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 148 | 145 | 142 | 140 | 138 | 138 | 138 | 137 | 138 | 140 | 140 | 140 | 140 | 140 | 140 | 137 | 134 | 130 | 122 | 118 | 110 | 110 | 108 | 106 | 105 | 103 | 104 | 104 | 104 | 104 | 103 | 103 | 102 | 102 |
61 | 113 | 114 | 115 | 116 | 116 | 117 | 118 | 120 | 123 | 129 | 133 | 137 | 140 | 142 | 144 | 146 | 149 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 147 | 143 | 141 | 139 | 137 | 136 | 136 | 135 | 136 | 138 | 140 | 140 | 140 | 140 | 139 | 136 | 134 | 130 | 123 | 119 | 113 | 109 | 108 | 106 | 104 | 103 | 104 | 104 | 104 | 103 | 103 | 102 | 102 | 101 |
62 | 114 | 115 | 115 | 116 | 117 | 118 | 118 | 120 | 123 | 129 | 133 | 137 | 140 | 143 | 145 | 147 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 148 | 145 | 142 | 139 | 138 | 136 | 135 | 134 | 134 | 134 | 136 | 138 | 137 | 138 | 139 | 137 | 134 | 132 | 125 | 122 | 117 | 114 | 109 | 107 | 105 | 103 | 102 | 104 | 104 | 103 | 103 | 102 | 102 | 101 | 101 |
63 | 114 | 115 | 116 | 117 | 117 | 119 | 118 | 120 | 123 | 128 | 132 | 136 | 139 | 142 | 145 | 148 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 147 | 144 | 141 | 139 | 136 | 135 | 134 | 133 | 132 | 132 | 134 | 134 | 134 | 134 | 135 | 133 | 131 | 128 | 124 | 120 | 116 | 113 | 110 | 107 | 104 | 102 | 102 | 103 | 103 | 103 | 102 | 102 | 102 | 101 | 100 |
64 | 115 | 116 | 116 | 117 | 118 | 119 | 119 | 120 | 124 | 128 | 132 | 136 | 139 | 142 | 145 | 148 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 149 | 146 | 143 | 140 | 138 | 135 | 134 | 133 | 131 | 131 | 131 | 131 | 131 | 131 | 131 | 130 | 127 | 124 | 122 | 119 | 117 | 115 | 112 | 109 | 106 | 104 | 101 | 102 | 103 | 103 | 102 | 102 | 102 | 101 | 100 | 100 |
65 | 115 | 116 | 117 | 118 | 118 | 119 | 120 | 123 | 125 | 128 | 131 | 135 | 138 | 141 | 145 | 148 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 147 | 145 | 142 | 139 | 137 | 134 | 132 | 131 | 130 | 129 | 128 | 128 | 128 | 128 | 128 | 126 | 123 | 121 | 119 | 116 | 114 | 112 | 110 | 108 | 105 | 103 | 101 | 103 | 103 | 103 | 102 | 102 | 101 | 100 | 100 | 100 |
66 | 116 | 117 | 118 | 118 | 119 | 120 | 122 | 123 | 125 | 128 | 131 | 134 | 137 | 141 | 145 | 148 | 149 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 148 | 145 | 143 | 141 | 138 | 135 | 133 | 130 | 129 | 128 | 127 | 126 | 125 | 125 | 125 | 124 | 123 | 120 | 118 | 116 | 114 | 111 | 109 | 107 | 106 | 104 | 102 | 100 | 101 | 101 | 102 | 102 | 101 | 100 | 100 | 100 | 100 |
67 | 116 | 117 | 118 | 119 | 120 | 121 | 123 | 124 | 126 | 128 | 130 | 133 | 137 | 140 | 144 | 145 | 147 | 148 | 149 | 150 | 149 | 149 | 147 | 146 | 144 | 141 | 139 | 136 | 133 | 131 | 129 | 128 | 127 | 126 | 125 | 124 | 123 | 123 | 122 | 121 | 120 | 118 | 116 | 114 | 112 | 108 | 107 | 105 | 103 | 102 | 100 | 100 | 100 | 100 | 101 | 101 | 100 | 100 | 100 | 100 | 100 |
68 | 117 | 118 | 119 | 119 | 120 | 121 | 123 | 124 | 126 | 128 | 129 | 131 | 135 | 139 | 142 | 143 | 145 | 146 | 147 | 147 | 147 | 146 | 144 | 142 | 140 | 138 | 135 | 133 | 130 | 128 | 127 | 126 | 125 | 124 | 123 | 122 | 121 | 120 | 119 | 118 | 117 | 115 | 114 | 112 | 110 | 106 | 105 | 102 | 101 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 99 | 99 | 99 | 99 |
69 | 117 | 118 | 119 | 120 | 120 | 121 | 123 | 124 | 125 | 126 | 128 | 129 | 132 | 137 | 140 | 142 | 143 | 143 | 144 | 144 | 144 | 143 | 141 | 139 | 137 | 135 | 133 | 130 | 128 | 127 | 126 | 125 | 123 | 122 | 121 | 120 | 119 | 117 | 116 | 115 | 114 | 112 | 111 | 108 | 107 | 105 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 99 | 99 | 99 | 99 | 99 | 99 | 99 | 98 |
70 | 116 | 117 | 118 | 120 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 128 | 130 | 134 | 139 | 140 | 141 | 141 | 141 | 141 | 141 | 140 | 138 | 136 | 134 | 133 | 131 | 129 | 127 | 125 | 124 | 123 | 122 | 120 | 119 | 118 | 117 | 116 | 114 | 112 | 111 | 108 | 109 | 106 | 106 | 100 | 100 | 100 | 100 | 100 | 99 | 99 | 99 | 99 | 99 | 99 | 99 | 98 | 98 | 98 | 97 |
71 | 114 | 115 | 116 | 117 | 119 | 119 | 120 | 121 | 122 | 123 | 125 | 127 | 129 | 133 | 136 | 134 | 134 | 136 | 138 | 138 | 137 | 137 | 135 | 133 | 132 | 130 | 129 | 127 | 125 | 124 | 122 | 121 | 120 | 119 | 117 | 116 | 115 | 114 | 112 | 110 | 109 | 108 | 107 | 105 | 105 | 100 | 100 | 100 | 100 | 99 | 99 | 99 | 98 | 98 | 98 | 98 | 98 | 97 | 97 | 97 | 97 |
72 | 112 | 113 | 114 | 115 | 116 | 116 | 117 | 119 | 120 | 122 | 124 | 126 | 127 | 129 | 129 | 128 | 127 | 129 | 132 | 133 | 133 | 133 | 133 | 131 | 129 | 127 | 126 | 125 | 124 | 122 | 121 | 119 | 118 | 117 | 116 | 114 | 113 | 112 | 110 | 109 | 108 | 106 | 106 | 105 | 100 | 100 | 100 | 98 | 98 | 98 | 98 | 98 | 98 | 97 | 97 | 97 | 97 | 97 | 97 | 97 | 96 |
73 | 109 | 111 | 112 | 112 | 113 | 113 | 113 | 114 | 116 | 119 | 121 | 123 | 124 | 125 | 124 | 123 | 123 | 123 | 125 | 127 | 129 | 129 | 128 | 128 | 127 | 125 | 124 | 123 | 122 | 121 | 119 | 118 | 117 | 116 | 114 | 113 | 112 | 110 | 109 | 108 | 107 | 106 | 105 | 100 | 100 | 100 | 97 | 97 | 97 | 97 | 97 | 97 | 97 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 |
74 | 106 | 107 | 108 | 108 | 109 | 110 | 110 | 112 | 113 | 114 | 117 | 119 | 120 | 121 | 119 | 117 | 117 | 117 | 118 | 120 | 123 | 124 | 125 | 125 | 125 | 123 | 121 | 120 | 120 | 119 | 118 | 117 | 116 | 115 | 114 | 113 | 111 | 109 | 109 | 107 | 106 | 105 | 100 | 100 | 100 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 |
75 | 104 | 105 | 105 | 106 | 106 | 107 | 108 | 108 | 109 | 109 | 111 | 115 | 116 | 114 | 113 | 112 | 111 | 110 | 111 | 113 | 116 | 119 | 122 | 122 | 122 | 121 | 120 | 119 | 118 | 118 | 117 | 116 | 115 | 114 | 113 | 112 | 111 | 108 | 108 | 106 | 105 | 100 | 100 | 100 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 |
76 | 102 | 103 | 103 | 104 | 104 | 105 | 106 | 106 | 107 | 108 | 109 | 111 | 112 | 110 | 109 | 108 | 108 | 108 | 108 | 109 | 110 | 112 | 116 | 117 | 117 | 118 | 118 | 118 | 117 | 116 | 116 | 115 | 114 | 113 | 112 | 111 | 110 | 107 | 107 | 105 | 100 | 100 | 100 | 97 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 |
77 | 101 | 102 | 103 | 103 | 104 | 105 | 105 | 106 | 106 | 107 | 108 | 109 | 109 | 107 | 106 | 106 | 105 | 105 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 113 | 114 | 115 | 115 | 115 | 114 | 113 | 112 | 111 | 110 | 108 | 108 | 106 | 105 | 100 | 100 | 100 | 97 | 97 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 |
78 | 100 | 101 | 102 | 102 | 103 | 103 | 104 | 104 | 105 | 106 | 106 | 107 | 106 | 106 | 106 | 105 | 105 | 104 | 103 | 103 | 104 | 105 | 107 | 108 | 110 | 111 | 111 | 112 | 112 | 113 | 113 | 112 | 111 | 110 | 108 | 107 | 106 | 105 | 100 | 100 | 100 | 98 | 97 | 97 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 |
79 | 100 | 101 | 101 | 102 | 102 | 103 | 103 | 104 | 104 | 105 | 105 | 105 | 105 | 106 | 105 | 105 | 104 | 103 | 102 | 101 | 102 | 103 | 104 | 106 | 107 | 110 | 111 | 111 | 111 | 112 | 112 | 112 | 110 | 107 | 107 | 106 | 105 | 102 | 100 | 100 | 99 | 98 | 97 | 97 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 95 |
80 | 99 | 100 | 101 | 102 | 102 | 103 | 103 | 103 | 104 | 104 | 104 | 104 | 103 | 104 | 104 | 104 | 104 | 102 | 101 | 101 | 102 | 103 | 104 | 105 | 107 | 110 | 111 | 111 | 111 | 111 | 111 | 111 | 108 | 106 | 105 | 105 | 102 | 101 | 100 | 99 | 99 | 98 | 97 | 97 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 95 | 95 |
81 | 99 | 100 | 100 | 101 | 101 | 102 | 102 | 102 | 103 | 103 | 103 | 103 | 102 | 103 | 103 | 104 | 103 | 102 | 101 | 101 | 101 | 102 | 103 | 104 | 106 | 109 | 110 | 111 | 111 | 111 | 110 | 110 | 107 | 105 | 103 | 104 | 100 | 100 | 99 | 99 | 98 | 98 | 97 | 97 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 95 | 95 | 95 | 95 | 95 | 95 | 95 |
82 | 99 | 100 | 100 | 100 | 101 | 101 | 101 | 102 | 102 | 103 | 102 | 102 | 101 | 102 | 102 | 103 | 103 | 101 | 101 | 100 | 101 | 101 | 102 | 103 | 105 | 109 | 110 | 110 | 111 | 110 | 110 | 109 | 106 | 105 | 100 | 102 | 100 | 99 | 99 | 99 | 98 | 98 | 97 | 97 | 96 | 96 | 96 | 96 | 96 | 96 | 95 | 95 | 95 | 95 | 95 | 95 | 95 | 95 | 95 | 95 | 94 |
83 | 99 | 99 | 99 | 99 | 100 | 100 | 101 | 101 | 102 | 102 | 101 | 101 | 101 | 101 | 101 | 102 | 102 | 101 | 100 | 100 | 101 | 101 | 101 | 103 | 104 | 107 | 109 | 109 | 110 | 110 | 109 | 108 | 105 | 102 | 100 | 100 | 99 | 99 | 99 | 98 | 98 | 98 | 97 | 96 | 96 | 96 | 96 | 96 | 95 | 95 | 95 | 95 | 95 | 95 | 95 | 94 | 94 | 94 | 94 | 94 | 94 |
84 | 98 | 99 | 99 | 99 | 99 | 100 | 100 | 101 | 101 | 102 | 101 | 100 | 100 | 100 | 101 | 101 | 101 | 100 | 100 | 100 | 100 | 101 | 101 | 101 | 103 | 106 | 107 | 109 | 109 | 109 | 109 | 107 | 104 | 101 | 100 | 99 | 99 | 99 | 98 | 98 | 98 | 97 | 96 | 96 | 96 | 96 | 95 | 95 | 95 | 95 | 95 | 95 | 95 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 |
85 | 98 | 98 | 98 | 99 | 99 | 99 | 100 | 100 | 101 | 101 | 100 | 100 | 99 | 99 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 101 | 101 | 101 | 102 | 105 | 106 | 109 | 108 | 109 | 107 | 105 | 102 | 100 | 100 | 99 | 99 | 98 | 98 | 98 | 97 | 96 | 96 | 96 | 96 | 95 | 95 | 95 | 95 | 95 | 95 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 |
86 | 97 | 98 | 98 | 98 | 99 | 99 | 99 | 100 | 100 | 100 | 100 | 100 | 99 | 99 | 99 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 101 | 101 | 101 | 103 | 104 | 105 | 106 | 105 | 104 | 101 | 100 | 100 | 99 | 99 | 98 | 98 | 97 | 97 | 97 | 96 | 96 | 96 | 95 | 95 | 95 | 95 | 95 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 |
87 | 97 | 97 | 97 | 98 | 98 | 99 | 99 | 99 | 100 | 100 | 100 | 99 | 99 | 99 | 99 | 99 | 100 | 100 | 100 | 100 | 100 | 100 | 101 | 101 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 99 | 99 | 98 | 97 | 97 | 97 | 96 | 96 | 96 | 95 | 95 | 95 | 95 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 94 |
commented Oct 16, 2018
the pythran version (with fixed clipping) |
commented Oct 16, 2018
basically just outline and add a comment :-) It's super fast, but I have difficulties comparing with other version :-) |
I am making a 2d top-down shooter game and ideally I would like the enemies to only shoot at the player when they see him/her (so the player could hide behind a crate etc.)
I have done research and I think the best way to do this would be raycasting. I have not been able to find a good example of raycasting in pygame.
Alternatively, I saw this piece of code on a different stackoverflow question ( Pygame Line of Sight from Fixed Position )
but I am not sure if it would accomplsih the kind of thing I want to and if it is I'm not sure how I would implement it.
What I am asking is firstly, would the code I am using accomplish what I wanted to do and if so how would I implement it and is there a better way to do it.
1 Answer
I am assuming the variables 'player' and 'person' are the positions of the player and enemy? If so, the code you have added will check if either the two objects:
- are in the same x position (person[0] player[0])
- are in the same y position (person[1] player[1])
- have equal x and y differences, i.e. the objects are at 45 degrees to each other ( abs(deltaX) abs(deltaY) ).
This doesn't seem like what you want, however.
What might work is if you check if :
the angle between the enemy and barrier is equal to the angle between the enemy and the player. One way to do that is to use tan(angle) = opposite / adjacent, or deltaY / deltaX.
the enemy is further from the player than from the barricade. This can be done using pythagoras.
Here is a function for this which might help:
So if the angles of the player and barrier from the enemy are equal, that are along the same line. If the enemy is also further from the player than from the barricade, the player is behind the barricade compared to the enemy.
EDIT: Actually this will only work if the line from the enemy to the barrier is exactly equal to the line from the enemy to the player. This might need editing to take into account the range of the barrier.