├── .gitignore
├── Cargo.lock
├── Cargo.toml
├── README.md
├── images
├── att1.gif
├── att3.gif
├── att4.gif
├── att6.gif
├── att7.gif
├── sc_plane.png
├── sc_ray.png
├── sc_tri1.png
├── sc_tri2.png
└── sc_vec_halves.png
├── src
├── line.rs
├── main.rs
├── shapes.rs
├── surface.rs
├── tmp.rs
└── vector.rs
└── test
└── tower.obj
/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 | .idea
3 |
--------------------------------------------------------------------------------
/Cargo.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Cargo.
2 | # It is not intended for manual editing.
3 | [[package]]
4 | name = "adler"
5 | version = "0.2.3"
6 | source = "registry+https://github.com/rust-lang/crates.io-index"
7 | checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e"
8 |
9 | [[package]]
10 | name = "adler32"
11 | version = "1.2.0"
12 | source = "registry+https://github.com/rust-lang/crates.io-index"
13 | checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
14 |
15 | [[package]]
16 | name = "autocfg"
17 | version = "1.0.1"
18 | source = "registry+https://github.com/rust-lang/crates.io-index"
19 | checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
20 |
21 | [[package]]
22 | name = "bitflags"
23 | version = "1.2.1"
24 | source = "registry+https://github.com/rust-lang/crates.io-index"
25 | checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
26 |
27 | [[package]]
28 | name = "bytemuck"
29 | version = "1.5.0"
30 | source = "registry+https://github.com/rust-lang/crates.io-index"
31 | checksum = "5a4bad0c5981acc24bc09e532f35160f952e35422603f0563cd7a73c2c2e65a0"
32 |
33 | [[package]]
34 | name = "byteorder"
35 | version = "1.4.2"
36 | source = "registry+https://github.com/rust-lang/crates.io-index"
37 | checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b"
38 |
39 | [[package]]
40 | name = "cfg-if"
41 | version = "1.0.0"
42 | source = "registry+https://github.com/rust-lang/crates.io-index"
43 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
44 |
45 | [[package]]
46 | name = "color_quant"
47 | version = "1.1.0"
48 | source = "registry+https://github.com/rust-lang/crates.io-index"
49 | checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
50 |
51 | [[package]]
52 | name = "const_fn"
53 | version = "0.4.5"
54 | source = "registry+https://github.com/rust-lang/crates.io-index"
55 | checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6"
56 |
57 | [[package]]
58 | name = "crc32fast"
59 | version = "1.2.1"
60 | source = "registry+https://github.com/rust-lang/crates.io-index"
61 | checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a"
62 | dependencies = [
63 | "cfg-if",
64 | ]
65 |
66 | [[package]]
67 | name = "crossbeam-channel"
68 | version = "0.5.0"
69 | source = "registry+https://github.com/rust-lang/crates.io-index"
70 | checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775"
71 | dependencies = [
72 | "cfg-if",
73 | "crossbeam-utils",
74 | ]
75 |
76 | [[package]]
77 | name = "crossbeam-deque"
78 | version = "0.8.0"
79 | source = "registry+https://github.com/rust-lang/crates.io-index"
80 | checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9"
81 | dependencies = [
82 | "cfg-if",
83 | "crossbeam-epoch",
84 | "crossbeam-utils",
85 | ]
86 |
87 | [[package]]
88 | name = "crossbeam-epoch"
89 | version = "0.9.1"
90 | source = "registry+https://github.com/rust-lang/crates.io-index"
91 | checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d"
92 | dependencies = [
93 | "cfg-if",
94 | "const_fn",
95 | "crossbeam-utils",
96 | "lazy_static",
97 | "memoffset",
98 | "scopeguard",
99 | ]
100 |
101 | [[package]]
102 | name = "crossbeam-utils"
103 | version = "0.8.1"
104 | source = "registry+https://github.com/rust-lang/crates.io-index"
105 | checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d"
106 | dependencies = [
107 | "autocfg",
108 | "cfg-if",
109 | "lazy_static",
110 | ]
111 |
112 | [[package]]
113 | name = "deflate"
114 | version = "0.8.6"
115 | source = "registry+https://github.com/rust-lang/crates.io-index"
116 | checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174"
117 | dependencies = [
118 | "adler32",
119 | "byteorder",
120 | ]
121 |
122 | [[package]]
123 | name = "either"
124 | version = "1.6.1"
125 | source = "registry+https://github.com/rust-lang/crates.io-index"
126 | checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
127 |
128 | [[package]]
129 | name = "gif"
130 | version = "0.11.1"
131 | source = "registry+https://github.com/rust-lang/crates.io-index"
132 | checksum = "02efba560f227847cb41463a7395c514d127d4f74fff12ef0137fff1b84b96c4"
133 | dependencies = [
134 | "color_quant",
135 | "weezl",
136 | ]
137 |
138 | [[package]]
139 | name = "hermit-abi"
140 | version = "0.1.18"
141 | source = "registry+https://github.com/rust-lang/crates.io-index"
142 | checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"
143 | dependencies = [
144 | "libc",
145 | ]
146 |
147 | [[package]]
148 | name = "image"
149 | version = "0.23.12"
150 | source = "registry+https://github.com/rust-lang/crates.io-index"
151 | checksum = "7ce04077ead78e39ae8610ad26216aed811996b043d47beed5090db674f9e9b5"
152 | dependencies = [
153 | "bytemuck",
154 | "byteorder",
155 | "color_quant",
156 | "gif",
157 | "jpeg-decoder",
158 | "num-iter",
159 | "num-rational",
160 | "num-traits",
161 | "png",
162 | "scoped_threadpool",
163 | "tiff",
164 | ]
165 |
166 | [[package]]
167 | name = "jpeg-decoder"
168 | version = "0.1.21"
169 | source = "registry+https://github.com/rust-lang/crates.io-index"
170 | checksum = "d6187dc218616c3a222bae7b78938f5af5e7c27d9cbef4c30ebca709cd680bf8"
171 | dependencies = [
172 | "rayon",
173 | ]
174 |
175 | [[package]]
176 | name = "lazy_static"
177 | version = "1.4.0"
178 | source = "registry+https://github.com/rust-lang/crates.io-index"
179 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
180 |
181 | [[package]]
182 | name = "libc"
183 | version = "0.2.82"
184 | source = "registry+https://github.com/rust-lang/crates.io-index"
185 | checksum = "89203f3fba0a3795506acaad8ebce3c80c0af93f994d5a1d7a0b1eeb23271929"
186 |
187 | [[package]]
188 | name = "memoffset"
189 | version = "0.6.1"
190 | source = "registry+https://github.com/rust-lang/crates.io-index"
191 | checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87"
192 | dependencies = [
193 | "autocfg",
194 | ]
195 |
196 | [[package]]
197 | name = "miniz_oxide"
198 | version = "0.3.7"
199 | source = "registry+https://github.com/rust-lang/crates.io-index"
200 | checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
201 | dependencies = [
202 | "adler32",
203 | ]
204 |
205 | [[package]]
206 | name = "miniz_oxide"
207 | version = "0.4.3"
208 | source = "registry+https://github.com/rust-lang/crates.io-index"
209 | checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d"
210 | dependencies = [
211 | "adler",
212 | "autocfg",
213 | ]
214 |
215 | [[package]]
216 | name = "num-integer"
217 | version = "0.1.44"
218 | source = "registry+https://github.com/rust-lang/crates.io-index"
219 | checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
220 | dependencies = [
221 | "autocfg",
222 | "num-traits",
223 | ]
224 |
225 | [[package]]
226 | name = "num-iter"
227 | version = "0.1.42"
228 | source = "registry+https://github.com/rust-lang/crates.io-index"
229 | checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
230 | dependencies = [
231 | "autocfg",
232 | "num-integer",
233 | "num-traits",
234 | ]
235 |
236 | [[package]]
237 | name = "num-rational"
238 | version = "0.3.2"
239 | source = "registry+https://github.com/rust-lang/crates.io-index"
240 | checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
241 | dependencies = [
242 | "autocfg",
243 | "num-integer",
244 | "num-traits",
245 | ]
246 |
247 | [[package]]
248 | name = "num-traits"
249 | version = "0.2.14"
250 | source = "registry+https://github.com/rust-lang/crates.io-index"
251 | checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
252 | dependencies = [
253 | "autocfg",
254 | ]
255 |
256 | [[package]]
257 | name = "num_cpus"
258 | version = "0.2.13"
259 | source = "registry+https://github.com/rust-lang/crates.io-index"
260 | checksum = "cee7e88156f3f9e19bdd598f8d6c9db7bf4078f99f8381f43a55b09648d1a6e3"
261 | dependencies = [
262 | "libc",
263 | ]
264 |
265 | [[package]]
266 | name = "num_cpus"
267 | version = "1.13.0"
268 | source = "registry+https://github.com/rust-lang/crates.io-index"
269 | checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
270 | dependencies = [
271 | "hermit-abi",
272 | "libc",
273 | ]
274 |
275 | [[package]]
276 | name = "obj-rs"
277 | version = "0.6.2"
278 | source = "registry+https://github.com/rust-lang/crates.io-index"
279 | checksum = "cf37dd242b0636bf442a539738f54330b0db9ad9758a89de154e9d3866a7847e"
280 | dependencies = [
281 | "num-traits",
282 | "serde",
283 | "vec_map",
284 | ]
285 |
286 | [[package]]
287 | name = "png"
288 | version = "0.16.8"
289 | source = "registry+https://github.com/rust-lang/crates.io-index"
290 | checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6"
291 | dependencies = [
292 | "bitflags",
293 | "crc32fast",
294 | "deflate",
295 | "miniz_oxide 0.3.7",
296 | ]
297 |
298 | [[package]]
299 | name = "proc-macro2"
300 | version = "1.0.24"
301 | source = "registry+https://github.com/rust-lang/crates.io-index"
302 | checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
303 | dependencies = [
304 | "unicode-xid",
305 | ]
306 |
307 | [[package]]
308 | name = "quote"
309 | version = "1.0.8"
310 | source = "registry+https://github.com/rust-lang/crates.io-index"
311 | checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df"
312 | dependencies = [
313 | "proc-macro2",
314 | ]
315 |
316 | [[package]]
317 | name = "rayon"
318 | version = "1.5.0"
319 | source = "registry+https://github.com/rust-lang/crates.io-index"
320 | checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674"
321 | dependencies = [
322 | "autocfg",
323 | "crossbeam-deque",
324 | "either",
325 | "rayon-core",
326 | ]
327 |
328 | [[package]]
329 | name = "rayon-core"
330 | version = "1.9.0"
331 | source = "registry+https://github.com/rust-lang/crates.io-index"
332 | checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a"
333 | dependencies = [
334 | "crossbeam-channel",
335 | "crossbeam-deque",
336 | "crossbeam-utils",
337 | "lazy_static",
338 | "num_cpus 1.13.0",
339 | ]
340 |
341 | [[package]]
342 | name = "scoped_threadpool"
343 | version = "0.1.9"
344 | source = "registry+https://github.com/rust-lang/crates.io-index"
345 | checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8"
346 |
347 | [[package]]
348 | name = "scopeguard"
349 | version = "1.1.0"
350 | source = "registry+https://github.com/rust-lang/crates.io-index"
351 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
352 |
353 | [[package]]
354 | name = "serde"
355 | version = "1.0.123"
356 | source = "registry+https://github.com/rust-lang/crates.io-index"
357 | checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae"
358 | dependencies = [
359 | "serde_derive",
360 | ]
361 |
362 | [[package]]
363 | name = "serde_derive"
364 | version = "1.0.123"
365 | source = "registry+https://github.com/rust-lang/crates.io-index"
366 | checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31"
367 | dependencies = [
368 | "proc-macro2",
369 | "quote",
370 | "syn",
371 | ]
372 |
373 | [[package]]
374 | name = "simplerays-test"
375 | version = "0.1.0"
376 | dependencies = [
377 | "image",
378 | "num_cpus 0.2.13",
379 | "obj-rs",
380 | "scoped_threadpool",
381 | "stackvec",
382 | ]
383 |
384 | [[package]]
385 | name = "stackvec"
386 | version = "0.2.1"
387 | source = "registry+https://github.com/rust-lang/crates.io-index"
388 | checksum = "a28337dadadf1f595e7472e02ed7e27cbc790828b10336f144b5790d21152c16"
389 |
390 | [[package]]
391 | name = "syn"
392 | version = "1.0.60"
393 | source = "registry+https://github.com/rust-lang/crates.io-index"
394 | checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081"
395 | dependencies = [
396 | "proc-macro2",
397 | "quote",
398 | "unicode-xid",
399 | ]
400 |
401 | [[package]]
402 | name = "tiff"
403 | version = "0.6.1"
404 | source = "registry+https://github.com/rust-lang/crates.io-index"
405 | checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437"
406 | dependencies = [
407 | "jpeg-decoder",
408 | "miniz_oxide 0.4.3",
409 | "weezl",
410 | ]
411 |
412 | [[package]]
413 | name = "unicode-xid"
414 | version = "0.2.1"
415 | source = "registry+https://github.com/rust-lang/crates.io-index"
416 | checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
417 |
418 | [[package]]
419 | name = "vec_map"
420 | version = "0.8.2"
421 | source = "registry+https://github.com/rust-lang/crates.io-index"
422 | checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
423 |
424 | [[package]]
425 | name = "weezl"
426 | version = "0.1.3"
427 | source = "registry+https://github.com/rust-lang/crates.io-index"
428 | checksum = "3e2bb9fc8309084dd7cd651336673844c1d47f8ef6d2091ec160b27f5c4aa277"
429 |
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "simplerays-test"
3 | version = "0.1.0"
4 | authors = ["dranikpg"]
5 | edition = "2018"
6 |
7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8 |
9 | [dependencies]
10 | image = "*"
11 | num_cpus = "0.2"
12 | scoped_threadpool = "0.1.9"
13 | stackvec="*"
14 | obj-rs = "0.6"
15 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Simple ray tracer written in Rust from scratch
2 |
3 | I've just finished my first semester at the Faculty of ~~Applied~~
4 | Mathematics ~~and Computer Science~~ at the Belarusian SU. I missed conventional
5 | programming a bit and I'm curious to see how I can apply any of my new
6 | knowledge. Finding exciting yet widely applied and simple topic for a side
7 | project turned out to be not that simple. Linear algebra is broadly used in
8 | computer graphics, where I previously came across matrices, transformations and
9 | projections when working with OpenGL, but back then I had only a somewhat
10 | shallow understanding of those topics. I've never done any *ray tracing*, so my
11 | choice simply fell on it. Besides that it somewhat overhyped now and has very
12 | little to almost no theory - just vectors and geometry. I haven't read any posts
13 | or books specifically on ray tracing, so my approach surely won't be the fastest
14 | or most optimal, but I think it will be quite interesting to come up with a
15 | working one.
16 |
17 | I've chosen Rust 🦀 because it's my favourite programming language and I haven't
18 | used it for a while. So let's start!
19 |
20 | ### Everything starts with a ray
21 |
22 | I've defined some utils for working with floating point numbers, a Point and
23 | Vector struct and some ~~ugly~~ convenient macros for creating vectors and
24 | points. I first used `f32` for all calculations, but then found out that
25 | precision degrades very quickly, especially for extremely sharp angles. At that
26 | point I had already marked the Point struct as `Copy`, so I kept the marker,
27 | even though its new size of 24 bytes exceeded twice the machine word. This is
28 | just a general rule of thumb and I bet it has almost no effect in this case, as
29 | the average number of arguments in generally low.
30 |
31 | Raytracing has obviously something to do with casting rays. A ray is just a line
32 | with a positive direction. A line in space can be defined by a point and a
33 | direction vector. What matters is that we can describe every point on this line
34 | with a single number.
35 |
36 | ```rust
37 | impl Line {
38 | pub fn at(&self, t: f64) -> Point {
39 | self.origin + t * self.direction
40 | }
41 | }
42 | ```
43 |
44 | To create an image we have to find out how to intersect rays with objects in
45 | space. Many might associate ray tracing with spheres, because they nicely
46 | demonstrate many visual effects. But I won't cover any of those effects. So
47 | we'll focus just on triangles. Besides that triangles can be used to approximate
48 | almost any shape and 3d models consists of them.
49 | **But how do we find the intersection of a line and a triangle?**
50 |
51 | ### The plane
52 |
53 | First, we have to define the plane which contains the triangle. A plane can be
54 | defined by a single point and a _normal vector_. The normal vector is actually
55 | the cross product of any two vectors in the plane.
56 |
57 |
58 |
59 | 
60 |
61 |
62 |
63 |
64 | So lets implement the _cross product_ for vectors:
65 |
66 | ```rust
67 | impl Vector {
68 | pub fn cross(&self, v2: Vector) -> Vector {
69 | Vector {
70 | x: (self.y * v2.z - self.z * v2.y),
71 | y: -(self.x * v2.z - self.z * v2.x),
72 | z: (self.x * v2.y - self.y * v2.x),
73 | }
74 | }
75 | }
76 | ```
77 |
78 | Then we can turn our point-normal pair into a well known equation
79 | `Ax + By + Cz + D = 0`, so our Plane constructor looks like:
80 |
81 | ```rust
82 | impl Plane {
83 | pub fn new(p: Point, v1: Vector, v2: Vector) -> MathResult {
84 | match v1.cross(v2) {
85 | v if v.is_zero() => Err(MathError::CollinearVectors),
86 | Vector { x, y, z } => Ok(Plane {
87 | a: x,
88 | b: y,
89 | c: z,
90 | d: -(x * p.x + y * p.y + z * p.z),
91 | })
92 | }
93 | }
94 | }
95 | ```
96 |
97 | To find the intersection of a line and a plane, we can express the coordinates
98 | of all points on the line in terms of our "line parameter", and then substitute
99 | those relations into the planes equation. By solving the equation for the "line
100 | parameter" we get the point of intersection.
101 |
102 | ### Does the triangle contain it?
103 |
104 | There are many ways to determine whether a triangle contains a point in two
105 | dimensions, so I first thought of equivalent approaches: introducing a two
106 | dimensional coordinate system on the plane or looking for intersections with the
107 | triangles sides.
108 |
109 | One approach is based on the fact, that if a point lies inside a triangle, then
110 | it lies in the same half plane for each side of the triangle (right or left half
111 | plane, depends on the order of traversal). We can generalize this property for
112 | the third dimension be reviewing one other property for vectors on the plane:
113 | the cross product of a vector with all vectors pointing right of it will point
114 | upwards, and for all vectors left of it - downwards (or downwards/upwards if the
115 | order of vectors in the cross product is flipped).
116 |
117 |
118 |
119 | 
120 |
121 |
122 |
123 | So if a point lies inside a triangle, then all cross products of each side with
124 | the corresponding vector, connecting the vertex and the point of intersection,
125 | point in the same direction:
126 |
127 |
128 |
129 |
130 |
131 | 
132 |
133 |
134 |
135 |
136 |
137 |
138 | 
139 |
140 |
141 |
142 |
143 |
144 |
145 | That results in a simple implementation using the cross product that we already
146 | defined:
147 |
148 | ```rust
149 | impl Triangle {
150 | fn is_inside(&self, pt: Point) -> bool {
151 | self.vertices.iter().enumerate()
152 | // calculate the cross products for each vertex
153 | .map(|(pos, vertex)| -> Vector {
154 | let next_vertex = self.vertices[(pos + 1) % 3];
155 | vector!(cross vector!(vertex, pt),
156 | vector!(vertex, next_vertex))
157 | })
158 | // check if each vector is codirectional with the sum of the previous ones
159 | // that is equivalent to all of them being pairwise codirectional
160 | .fold(Some(vector!()), |last_opt, v| -> Option {
161 | match last_opt {
162 | Some(last) => if v.is_codirectional(last) { Some(v + last) } else { None }
163 | None => None,
164 | }
165 | }).is_some()
166 | }
167 | }
168 | ```
169 |
170 | A ray intersects a triangle only if it intersects the plane containing the
171 | triangle and the point of intersection lies inside the triangle. Now we know how
172 | to verify both conditions, so lets move on to *casting rays*.
173 |
174 | ### How to cast rays?
175 |
176 | To create an image, we have to cast rays from an "eye" (or camera, or origin)
177 | through an imaginary grid. Finding the best approach to generate such a grid
178 | turned out to be an interesting task. For the sake of simplicity we'll say that
179 | our eye always looks at the origin and its rotation is locked. If it were to be
180 | an airplane, we'd say that its roll is always zero :)
181 |
182 | 
183 |
184 | Lets also say, that the global Y axis is the one that points "up". That means,
185 | that if the angle between the eye and the Oxz plane is not 90 degrees (a
186 | top-down projection), then "up" on the image always points "up" in the 3d world.
187 | Now we can see that the plane formed by the "eye" ray and the Y axis will always
188 | be perpendicular to the Oxz plane.
189 |
190 | Given those relations, there is a simple way to define the imaginary grid plane
191 | with a 2d coordinate system fixed at the global origin:
192 |
193 | * Because our rotation is always zero, our grid will be perpendicular to the
194 | "eye"-Y axis plane, so we can define our *local X axis* (Vx on the image) as
195 | the cross product of the Y axis and the "eye" ray.
196 | * Our *local Y axis* (Vy on the image) can be defined as the cross product
197 | between the "eye" ray and the local X axis.
198 |
199 | 
200 |
201 | Because I want the axes to point how I'm used to, ~~we~~ I have to "flip" x and
202 | y when converting image coordinates into rays:
203 |
204 | ```rust
205 | fn create_ray(env: &Environment, (x, y): (u32, u32)) -> Line {
206 | let interpolated = |cur: u32, max: u32| -> f64 {
207 | 2f64 * (cur as f64 / max as f64) - 1f64
208 | };
209 | let vx = vector!(cross env.origin, vector!(axis y)).normalized();
210 | let vy = vector!(cross env.origin, vx).normalized();
211 | let pt = vector!()
212 | + interpolated(y, IMAGE_SIZE.1) * env.grid_size * vx
213 | + interpolated(x, IMAGE_SIZE.0) * env.grid_size * vy;
214 | Line {
215 | direction: vector!(env.origin, pt),
216 | origin: env.origin,
217 | }
218 | }
219 | ```
220 |
221 | ### Turn the lights on!
222 |
223 | We already know how to find intersections of lines and triangles. But what about
224 | the _brightness_? In our world all objects will be opaque and there will be only
225 | one source of light - the sun. To find out whether a point on a triangle is lit
226 | by the sun, we have to cast another ray. If the ray from the intersection point
227 | to the sun intersects any other triangle, then our pixel is covered by a shadow.
228 | Because we don't consider on which side the "eye" ray intersected the plane, we
229 | have to make sure that both the sun and the "eye" are in the same half-space,
230 | bounded by the surface plane. Without this check both sides of each triangle
231 | would have the exact same lighting, which is obviously not true for
232 | non-transparent shapes. Two points are in the same half-space if their
233 | corresponding values for the plane formula are of the same sign.
234 |
235 | As far as I know, real raytracing casts many more rays to compute reflections,
236 | refractions, scattering etc. Instead, I decided to implement something *similar*
237 | to the _Phong shading_ model, which I'm familiar with from OpenGL. In this
238 | model, the brightness of a "pixel" consists of its _ambient_, _diffuse_ and
239 | specular components:
240 |
241 | * Every pixel is at least as bright as the _ambient_ brightness, even if it lies
242 | in a shadow
243 | * A pixel is brighter if it directly faces the sun, and darker if the angle
244 | between the surface normal and the sun ray is greater. How much this
245 | brightness varies in relation to the angle is the defined by the _diffuse_
246 | part.
247 | * Specular lighting indicates how rough or even a material is
248 | (the small bright spot on spheres), but it won't be used here
249 |
250 | Instead of finding the angle between the surface normal and the "sun" ray, we'll
251 | find just the cosine. The closer the absolute value is to 1, the closer the
252 | normal is to being aligned with the "sun" ray. We can find the cosine using the
253 | dot product.
254 |
255 | In our case we will use the ambient color only for covered pixels.
256 |
257 | ```rust
258 | fn compute_lights(env: &Environment, surface: &Triangle, pt: Point) -> f32 {
259 | let sun_ray = Line {
260 | direction: vector!(pt, env.sun),
261 | origin: pt,
262 | };
263 | let covered = env.surfaces.iter()
264 | .filter(|sf| !sf.triangle.contains(pt))
265 | .map(|sf| sf.triangle.intersect(&sun_ray))
266 | // check if any intersection lies on the positive direction of the ray
267 | .any(|opt| opt.map(|t| t >= -FLOAT_EPS).unwrap_or(false));
268 | let different_halves = surface.plane.subs(env.origin)
269 | * surface.plane.subs(env.sun) <= 0.0;
270 | if covered || different_halves {
271 | env.ambient_light
272 | } else {
273 | let normal = surface.plane.normal();
274 | let cos = sun_ray.direction.cos(normal).abs() as f32;
275 | (1.0 - env.diffuse_light) + cos * env.diffuse_light
276 | }
277 | }
278 | ```
279 |
280 | ### Lets cast finally
281 |
282 | It's pretty clear that from all the intersections, we have to discard those,
283 | which are behind our "eye", and choose the closest one from the remaining. Then
284 | we compute the brightness at the point of intersection and multiply it by the
285 | surface color:
286 |
287 | ```rust
288 | fn cast_ray(env: &Environment, ray: &Line) -> [u8; 3] {
289 | let intersection_opt = env.surfaces.iter()
290 | .map(|sf: &ColoredSurface| sf.triangle.intersect(ray).map(|t| (t, sf)))
291 | .filter(Option::is_some).map(Option::unwrap)
292 | // check if it lies on the positive direction of the ray
293 | .filter(|is| is.0 >= -FLOAT_EPS)
294 | // find closest to the origin
295 | .min_by(|a, b| a.0.partial_cmp(&b.0).unwrap());
296 | if let Some((ray_param, surface)) = intersection_opt {
297 | let brightness = compute_lights(&env, &surface.triangle, ray.at(ray_param));
298 | surface.color.iter()
299 | .map(|c| (*c as f32 * brightness) as u8).try_collect().unwrap()
300 | } else {
301 | VOID_COLOR
302 | }
303 | }
304 | ```
305 |
306 | ### Last steps
307 |
308 | Now we know how to cast rays, but how do we generate an image? The easiest way
309 | is just to save the ray casting results in an byte array (RBG, 3 bytes per
310 | pixel) and then convert it into a png. We'd also like to import 3d models to
311 | build more complex shapes. Oh, and using Rust and not going multi-threaded would
312 | be kind of lame.
313 |
314 | I'm using:
315 |
316 | * The [image ](https://crates.io/crates/image) crate to write the color array to
317 | a png file.
318 | * [obj-rs](https://crates.io/crates/obj-rs) to parse wavefront obj files and
319 | turn them into triangles.
320 | * [scoped_threadpool](https://crates.io/crates/scoped_threadpool) to avoid
321 | cluttering the code with `Arc`s when they're unnecessary
322 | * And of course the good old [num_cpus](https://crates.io/crates/num_cpus)
323 |
324 | ### Results:
325 |
326 | The results might seem not that impressive visually, but we're actually
327 | rendering 3d models (with shadows!) in less than just 400 lines of pure Rust
328 | without any graphics or maths libraries.
329 |
330 | Low poly wavefront from [Kenney](https://kenney.nl/assets/pirate-kit):
331 |
332 | 
333 |
334 | Moving sun:
335 |
336 | 
337 |
338 | By using sine in the interpolation function in `create_ray`, we can create some
339 | space curvature :)
340 |
341 | 
342 |
343 | My first three triangles (and an odd rotation bug):
344 |
345 | 
346 |
--------------------------------------------------------------------------------
/images/att1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dranikpg/simple-rays/edc9ef21c1d9dd95edad1b1a828a27295fcd35a4/images/att1.gif
--------------------------------------------------------------------------------
/images/att3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dranikpg/simple-rays/edc9ef21c1d9dd95edad1b1a828a27295fcd35a4/images/att3.gif
--------------------------------------------------------------------------------
/images/att4.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dranikpg/simple-rays/edc9ef21c1d9dd95edad1b1a828a27295fcd35a4/images/att4.gif
--------------------------------------------------------------------------------
/images/att6.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dranikpg/simple-rays/edc9ef21c1d9dd95edad1b1a828a27295fcd35a4/images/att6.gif
--------------------------------------------------------------------------------
/images/att7.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dranikpg/simple-rays/edc9ef21c1d9dd95edad1b1a828a27295fcd35a4/images/att7.gif
--------------------------------------------------------------------------------
/images/sc_plane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dranikpg/simple-rays/edc9ef21c1d9dd95edad1b1a828a27295fcd35a4/images/sc_plane.png
--------------------------------------------------------------------------------
/images/sc_ray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dranikpg/simple-rays/edc9ef21c1d9dd95edad1b1a828a27295fcd35a4/images/sc_ray.png
--------------------------------------------------------------------------------
/images/sc_tri1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dranikpg/simple-rays/edc9ef21c1d9dd95edad1b1a828a27295fcd35a4/images/sc_tri1.png
--------------------------------------------------------------------------------
/images/sc_tri2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dranikpg/simple-rays/edc9ef21c1d9dd95edad1b1a828a27295fcd35a4/images/sc_tri2.png
--------------------------------------------------------------------------------
/images/sc_vec_halves.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dranikpg/simple-rays/edc9ef21c1d9dd95edad1b1a828a27295fcd35a4/images/sc_vec_halves.png
--------------------------------------------------------------------------------
/src/line.rs:
--------------------------------------------------------------------------------
1 | use crate::vector::*;
2 |
3 | #[derive(Debug)]
4 | pub struct Line {
5 | pub direction: Vector,
6 | pub origin: Point,
7 | }
8 |
9 | impl Line {
10 | pub fn at(&self, t: f64) -> Point {
11 | self.origin + t * self.direction
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main.rs:
--------------------------------------------------------------------------------
1 | extern crate image;
2 | extern crate num_cpus;
3 | extern crate scoped_threadpool;
4 | extern crate stackvec;
5 |
6 | #[macro_use]
7 | mod vector;
8 | mod line;
9 | mod surface;
10 | mod shapes;
11 |
12 | use std::path::Path;
13 | use std::fs::File;
14 | use std::io::BufReader;
15 | use obj::{load_obj, Obj};
16 |
17 | use stackvec::prelude::*;
18 | use scoped_threadpool::Pool;
19 |
20 | use vector::{Point, Vector};
21 | use line::Line;
22 | use surface::{Triangle};
23 | use shapes::*;
24 |
25 | // ========================== Float & Wrapper ======================================================
26 |
27 | const FLOAT_EPS: f64 = 1e-8;
28 |
29 | pub fn is_zero(f: f64) -> bool {
30 | f.abs() <= FLOAT_EPS
31 | }
32 |
33 | #[derive(Copy, Clone, Debug)]
34 | pub enum MathError {
35 | CollinearVectors
36 | }
37 |
38 | pub type MathResult = Result;
39 |
40 | // ========================== Color & Environment ==================================================
41 |
42 | type Color = [u8; 3];
43 |
44 | struct ColoredSurface {
45 | triangle: Triangle,
46 | color: Color,
47 | }
48 |
49 | struct Environment {
50 | origin: Vector,
51 | sun: Vector,
52 | ambient_light: f32,
53 | diffuse_light: f32,
54 | grid_size: f64,
55 | surfaces: Vec,
56 | }
57 |
58 | const IMAGE_SIZE: (u32, u32) = (500, 500);
59 | const VOID_COLOR: [u8; 3] = [30, 30, 30];
60 |
61 | // ========================== Ray casting ==========================================================
62 |
63 | fn compute_lights(env: &Environment, surface: &Triangle, pt: Point) -> f32 {
64 | let sun_ray = Line {
65 | direction: vector!(pt, env.sun),
66 | origin: pt,
67 | };
68 | let covered = env.surfaces.iter()
69 | .filter(|sf| !sf.triangle.contains(pt))
70 | .map(|sf| sf.triangle.intersect(&sun_ray))
71 | // check if any intersection lies on the positive direction of the ray
72 | .any(|opt| opt.map(|t| t >= -FLOAT_EPS).unwrap_or(false));
73 | let different_halves = surface.plane.subs(env.origin)
74 | * surface.plane.subs(env.sun) <= 0.0;
75 | if covered || different_halves {
76 | env.ambient_light
77 | } else {
78 | let normal = surface.plane.normal();
79 | let cos = sun_ray.direction.cos(normal).abs() as f32;
80 | (1.0 - env.diffuse_light) + cos * env.diffuse_light
81 | }
82 | }
83 |
84 | fn cast_ray(env: &Environment, ray: &Line) -> [u8; 3] {
85 | let intersection_opt = env.surfaces.iter()
86 | .map(|sf: &ColoredSurface| sf.triangle.intersect(ray).map(|t| (t, sf)))
87 | .filter(Option::is_some).map(Option::unwrap)
88 | // check if it lies on the positive direction of the ray
89 | .filter(|is| is.0 >= -FLOAT_EPS)
90 | // find closest to the origin
91 | .min_by(|a, b| a.0.partial_cmp(&b.0).unwrap());
92 | if let Some((ray_param, surface)) = intersection_opt {
93 | let brightness = compute_lights(&env, &surface.triangle, ray.at(ray_param));
94 | surface.color.iter()
95 | .map(|c| (*c as f32 * brightness) as u8).try_collect().unwrap()
96 | } else {
97 | VOID_COLOR
98 | }
99 | }
100 |
101 | fn create_ray(env: &Environment, (x, y): (u32, u32)) -> Line {
102 | let interpolated = |cur: u32, max: u32| -> f64 {
103 | 2f64 * (cur as f64 / max as f64) - 1f64
104 | };
105 | let vx = vector!(cross env.origin, vector!(axis y)).normalized();
106 | let vy = vector!(cross env.origin, vx).normalized();
107 | let pt = vector!()
108 | + interpolated(y, IMAGE_SIZE.1) * env.grid_size * vx
109 | + interpolated(x, IMAGE_SIZE.0) * env.grid_size * vy;
110 | Line {
111 | direction: vector!(env.origin, pt),
112 | origin: env.origin,
113 | }
114 | }
115 |
116 | fn cast_rays(env: &Environment, pool: &mut Pool) -> Vec {
117 | let pixel_count: usize = (IMAGE_SIZE.0 * IMAGE_SIZE.1) as usize;
118 | let chunks_size = pixel_count / num_cpus::get();
119 | let mut buff: Vec<[u8; 3]> = vec![[0, 0, 0]; pixel_count];
120 | pool.scoped(|scope| {
121 | let mut offset = 0;
122 | for chunk in buff.chunks_mut(chunks_size) {
123 | let chunk_len = chunk.len();
124 | scope.execute(move || {
125 | let rays = (0..chunk.len() as u32)
126 | .map(|i| i + offset)
127 | .map(|i| (i / IMAGE_SIZE.1, i % IMAGE_SIZE.1))
128 | .map(|cords| create_ray(&env, cords));
129 | for (pixel, ray) in chunk.iter_mut().zip(rays) {
130 | *pixel = cast_ray(&env, &ray);
131 | }
132 | });
133 | offset += chunk_len as u32;
134 | }
135 | });
136 |
137 | // dirty but fast cast from Vec<[u8;3]> to Vec
138 | unsafe {
139 | buff.set_len(buff.len() * 3);
140 | std::mem::transmute(buff)
141 | }
142 | }
143 |
144 | // ========================== Helper ===============================================================
145 |
146 | fn parse_wavefront(filename: &str) -> Vec {
147 | let mut out = vec![];
148 | let mut min_y = 0.0;
149 | let mut max_dim = 0.0;
150 | let y_offset = 10.0;
151 | let input = BufReader::new(File::open(filename).unwrap());
152 | let model: Obj = load_obj(input).unwrap();
153 | let color = [255, 100, 100];
154 |
155 | for tri_indices_chunk in model.indices.chunks(3) {
156 | let vertices: [obj::Vertex; 3] = tri_indices_chunk
157 | .iter().map(|idx| model.vertices[*idx as usize])
158 | .try_collect().unwrap();
159 | let points: [Point; 3] = vertices.into_iter()
160 | .inspect(|vert| {
161 | vert.position.iter()
162 | .for_each(|coord| {
163 | max_dim = if coord.abs() > max_dim { coord.abs() } else { max_dim }
164 | })
165 | })
166 | .map(|vert| point!(vert.position[0], vert.position[1] - y_offset, vert.position[2]))
167 | .inspect(|vert| {
168 | min_y = if vert.y < min_y { vert.y } else { min_y }
169 | })
170 | .try_collect().unwrap();
171 | match triangle(points[0], points[1], points[2]) {
172 | Ok(triangle) => {
173 | out.push(ColoredSurface {
174 | triangle,
175 | color,
176 | })
177 | }
178 | Err(err) => {
179 | eprintln!("{:?}", err);
180 | }
181 | }
182 | }
183 | // push plane at minimum height
184 | {
185 | let size = 60.0;
186 | let (tri1, tri2) = plane(point!(0, min_y - 2.0 * FLOAT_EPS, 0), size, size)
187 | .unwrap();
188 | out.push(ColoredSurface { triangle: tri1, color: [200, 200, 200] });
189 | out.push(ColoredSurface { triangle: tri2, color: [200, 200, 200] });
190 | }
191 | out
192 | }
193 |
194 | fn main() {
195 | let mut env = Environment {
196 | origin: vector!(-5, 70, 0),
197 | sun: vector!(-80, 150, 80),
198 | ambient_light: 0.4,
199 | diffuse_light: 0.2,
200 | grid_size: 40.0,
201 | surfaces: parse_wavefront("test/tower.obj"),
202 | };
203 | let mut thread_pool = Pool::new(num_cpus::get() as u32);
204 | let origin_radius = 160f64;
205 | let steps: usize = 65;
206 |
207 | for step in 0..20 {
208 | let percent = step as f64 / steps as f64;
209 | let angle: f64 = percent * 2.0 * std::f64::consts::PI;
210 | env.origin.x = angle.sin() * origin_radius;
211 | env.origin.z = angle.cos() * origin_radius;
212 |
213 | let buffer = cast_rays(&env, &mut thread_pool);
214 | image::save_buffer(&Path::new(&format!("test/output{}.png", step)),
215 | &buffer, IMAGE_SIZE.0, IMAGE_SIZE.1, image::ColorType::Rgb8)
216 | .expect("failed to write image");
217 | }
218 | }
219 |
--------------------------------------------------------------------------------
/src/shapes.rs:
--------------------------------------------------------------------------------
1 | use super::surface::{Triangle};
2 | use super::vector::Point;
3 | use crate::MathResult;
4 |
5 | pub fn triangle(p1: Point, p2: Point, p3: Point) -> MathResult {
6 | Triangle::new(p1, p2, p3)
7 | }
8 |
9 | pub fn quad(p1: Point, p2: Point, p3: Point, p4: Point) -> MathResult<(Triangle, Triangle)> {
10 | Ok((
11 | triangle(p1, p2, p3)?,
12 | triangle(p1, p2, p4)?
13 | ))
14 | }
15 |
16 | pub fn plane(center: Point, length: f32, width: f32) -> MathResult<(Triangle, Triangle)> {
17 | let p1 = center + point!(length / 2f32, 0, width / 2f32);
18 | let p2 = center + point!(-length / 2f32, 0, -width / 2f32);
19 | quad(p1, p2, center + point!(length / 2f32, 0, - width / 2f32),
20 | center + point!(- length / 2f32, 0, width / 2f32))
21 | }
22 |
23 | pub fn tetrahedron(p1: Point, p2: Point, p3: Point, h: Point) -> MathResult> {
24 | Ok(vec![
25 | triangle(p1, p2, h)?,
26 | triangle(p2, p3, h)?,
27 | triangle(p3, p1, h)?,
28 | triangle(p1, p2, p3)?
29 | ])
30 | }
31 |
32 | pub fn cube(center: Point, size: f64) -> MathResult> {
33 | let mut out = vec![];
34 | for dim in 0..3 {
35 | for side in &[-1, 1] {
36 | let mut vs = vec![];
37 | for pt in 0..4 {
38 | let mut diff = vector!();
39 | diff[dim] = *side as f64 * size / 2.0;
40 | let (d1, d2) = {
41 | let mut idx_id = (0..3).filter(|i| *i != dim);
42 | (idx_id.next().unwrap(), idx_id.next().unwrap())
43 | };
44 | let (ds1, ds2) = match pt {
45 | 0 => (-size / 2.0, -size / 2.0),
46 | 1 => (size / 2.0, size / 2.0),
47 | 2 => (size / 2.0, -size / 2.0),
48 | 3 => (-size / 2.0, size / 2.0),
49 | _ => unreachable!()
50 | };
51 | diff[d1] = ds1;
52 | diff[d2] = ds2;
53 | vs.push(center + diff);
54 | }
55 | let qd = quad(vs[0], vs[1], vs[2], vs[3])?;
56 | out.push(qd.0);
57 | out.push(qd.1);
58 | }
59 | }
60 | Ok(out)
61 | }
62 |
63 |
--------------------------------------------------------------------------------
/src/surface.rs:
--------------------------------------------------------------------------------
1 | use super::*;
2 | use super::vector::*;
3 | use super::line::Line;
4 |
5 | #[derive(Debug)]
6 | pub struct Plane {
7 | a: f64,
8 | b: f64,
9 | c: f64,
10 | d: f64,
11 | }
12 |
13 | impl Plane {
14 | pub fn new(p: Point, v1: Vector, v2: Vector) -> MathResult {
15 | match v1.cross(v2) {
16 | v if v.is_zero() => Err(MathError::CollinearVectors),
17 | Vector { x, y, z } => Ok(Plane {
18 | a: x,
19 | b: y,
20 | c: z,
21 | d: -(x * p.x + y * p.y + z * p.z),
22 | })
23 | }
24 | }
25 | pub fn intersect(&self, line: &Line) -> Option {
26 | let Line { direction, origin } = line;
27 | let sum_t = self.a * direction.x + self.b * direction.y + self.c * direction.z;
28 | let sum_rhs = -self.d - self.a * origin.x - self.b * origin.y - self.c * origin.z;
29 | if is_zero(sum_t) {
30 | None
31 | } else {
32 | Some(sum_rhs / sum_t)
33 | }
34 | }
35 | pub fn contains(&self, pt: Point) -> bool {
36 | is_zero(self.subs(pt))
37 | }
38 | pub fn subs(&self, pt: Point) -> f64 {
39 | self.a * pt.x + self.b * pt.y + self.c * pt.z + self.d
40 | }
41 | pub fn normal(&self) -> Vector {
42 | vector!(self.a, self.b, self.c)
43 | }
44 | }
45 |
46 | #[derive(Debug)]
47 | pub struct Triangle {
48 | pub vertices: [Point; 3],
49 | pub plane: Plane,
50 | }
51 |
52 | impl Triangle {
53 | pub fn new(p1: Point, p2: Point, p3: Point) -> MathResult {
54 | let plane = Plane::new(p1, vector!(p1, p2), vector!(p1, p3))?;
55 | Ok(Triangle {
56 | vertices: [p1, p2, p3],
57 | plane,
58 | })
59 | }
60 | pub fn intersect(&self, line: &Line) -> Option {
61 | let (intersection, param) = match self.plane.intersect(line) {
62 | Some(t) => (line.at(t), t),
63 | None => return None,
64 | };
65 | if self.is_inside(intersection) {
66 | Some(param)
67 | } else {
68 | None
69 | }
70 | }
71 | pub fn contains(&self, pt: Point) -> bool {
72 | self.plane.contains(pt) && self.is_inside(pt)
73 | }
74 | fn is_inside(&self, pt: Point) -> bool {
75 | self.vertices.iter().enumerate()
76 | // for each vertex calculate the cross product of
77 | // 1) the segment between the vertex and the intersection point
78 | // 2) the next triangle side
79 | .map(|(pos, vertex)| -> Vector {
80 | let next_vertex = self.vertices[(pos + 1) % 3];
81 | vector!(cross vector!(vertex, pt),
82 | vector!(vertex, next_vertex))
83 | })
84 | // check if each vector `v` is codirectional with the sum of the previous ones
85 | // that is equivalent to all of them being pairwise codirectional
86 | .fold(Some(vector!()), |last_opt, v| -> Option {
87 | match last_opt {
88 | Some(last) => if v.is_codirectional(last) { Some(v + last) } else { None }
89 | None => None,
90 | }
91 | }).is_some()
92 | }
93 | }
--------------------------------------------------------------------------------
/src/tmp.rs:
--------------------------------------------------------------------------------
1 | fn tmp1() {
2 | let tri1 = Surface::new(point!(10,-3,-1), point!(0,-3,-5), point!(0,-3,10))
3 | .unwrap();
4 | let tri2 = Surface::new(point!(4,2,0), point!(1,-2,0), point!(2,-2,3))
5 | .unwrap();
6 | let tri3 = Surface::new(point!(20,-4,-10), point!(20,-4,10), point!(-2,-4,-1))
7 | .unwrap();
8 | }
9 |
10 | fn tmp2() -> Vec {
11 | let mut env = Environment {
12 | origin: vector!(-5, 3, 1.25),
13 | sun: vector!(0, 5, 0),
14 | ambient_light: 0.4,
15 | phong_shading: 0.2,
16 | surfaces: build_shapes(),
17 | };
18 | let mut shapes = vec![];
19 | {
20 | let (tri1, tri2) = plane(point!(0.3,0,0), 5f32, 5f32);
21 | shapes.push(ColoredSurface { surface: tri1, color: (0, 255, 0) });
22 | shapes.push(ColoredSurface { surface: tri2, color: (0, 255, 0) });
23 | }
24 | {
25 | let vs = tetrahedron(point!(-1,0,0.25), point!(1,0,0.25),
26 | point!(-1,0,2.25), point!(0,1,1.25));
27 | shapes.extend(vs.into_iter().map(|sf|
28 | ColoredSurface { surface: sf, color: (0, 0, 255) }
29 | ))
30 | }
31 | {
32 | let vs = cube(point!(0.25,0,-0.8), 1.0);
33 | shapes.extend(vs.into_iter().map(|sf|
34 | ColoredSurface { surface: sf, color: (255, 0, 0) }
35 | ))
36 | }
37 | shapes
38 | }
39 |
40 | fn tmp3() {
41 | let mut shapes = vec![];
42 | {
43 | let (tri1, tri2) = plane(point!(0,0,0), 5f32, 5f32);
44 | shapes.push(ColoredSurface { triangle: tri1, color: [0, 255, 0] });
45 | shapes.push(ColoredSurface { triangle: tri2, color: [0, 255, 0] });
46 | }
47 | for step in 0..10 {
48 | let radius = 2.0;
49 | let percent = step as f32 / 10.0;
50 | let angle = percent * 2.0 * std::f32::consts::PI;
51 | let x = angle.cos() * radius;
52 | let z = angle.sin() * radius;
53 | let x2 = (angle + 0.3).cos() * radius;
54 | let z2 = (angle + 0.3).sin() * radius;
55 | let surface = triangle(point!(0,2,0), point!(x,0,z), point!(x2,0,z2));
56 | let color = [(percent * 255.0) as u8, 0, 255];
57 | shapes.push(ColoredSurface { triangle: surface, color });
58 | }
59 | }
--------------------------------------------------------------------------------
/src/vector.rs:
--------------------------------------------------------------------------------
1 | use super::*;
2 | use std::ops::{Add, Mul, Index, IndexMut};
3 |
4 | // Point & Vector
5 | #[derive(Copy, Clone, Debug)]
6 | pub struct Point {
7 | pub x: f64,
8 | pub y: f64,
9 | pub z: f64,
10 | }
11 |
12 | pub type Vector = Point;
13 |
14 | macro_rules! point {
15 | ($x:expr, $y: expr, $z: expr) =>
16 | {crate::vector::Point{x: $x as f64, y: $y as f64, z: $z as f64}}
17 | }
18 |
19 | macro_rules! vector {
20 | (axis x) => {vector!(1, 0, 0)};
21 | (axis y) => {vector!(0, 1, 0)};
22 | (axis z) => {vector!(0, 0, 1)};
23 | () => {vector!(0,0,0)};
24 | ($a: expr, $b: expr) => {vector!($b.x-$a.x, $b.y-$a.y, $b.z-$a.z)};
25 | ($x:expr, $y: expr, $z: expr) => {point!($x, $y, $z) as crate::vector::Vector};
26 | (cross $a:expr, $b: expr) => {$a.cross($b)};
27 | }
28 |
29 | impl Vector {
30 | pub fn len(&self) -> f64 {
31 | let Vector { x, y, z } = self;
32 | (x * x + y * y + z * z).sqrt()
33 | }
34 | pub fn normalized(&self) -> Self {
35 | if !self.is_zero() {
36 | let len = self.len();
37 | vector!(self.x / len, self.y / len, self.z / len)
38 | } else {
39 | vector!()
40 | }
41 | }
42 | pub fn dot(&self, v2: Vector) -> f64 {
43 | let Vector { x, y, z } = self;
44 | x * v2.x + y * v2.y + z * v2.z
45 | }
46 | pub fn cos(&self, v2: Vector) -> f64 {
47 | self.dot(v2) / (self.len() * v2.len())
48 | }
49 | pub fn cross(&self, v2: Vector) -> Vector {
50 | Vector {
51 | x: (self.y * v2.z - self.z * v2.y),
52 | y: -(self.x * v2.z - self.z * v2.x),
53 | z: (self.x * v2.y - self.y * v2.x),
54 | }
55 | }
56 | pub fn is_zero(&self) -> bool {
57 | return is_zero(self.x) && is_zero(self.y) && is_zero(self.z);
58 | }
59 | pub fn is_collinear(&self, v2: Vector) -> bool {
60 | self.cross(v2).is_zero()
61 | }
62 | pub fn is_codirectional(&self, v2: Vector) -> bool {
63 | return self.is_collinear(v2) && self.x * v2.x >= -FLOAT_EPS
64 | && self.y * v2.y >= -FLOAT_EPS && self.z * v2.z >= -FLOAT_EPS;
65 | }
66 | }
67 |
68 | impl Add for Point {
69 | type Output = Point;
70 | fn add(self, rhs: Point) -> Self::Output {
71 | Point {
72 | x: self.x + rhs.x,
73 | y: self.y + rhs.y,
74 | z: self.z + rhs.z,
75 | }
76 | }
77 | }
78 |
79 | impl Mul for Vector {
80 | type Output = Vector;
81 | fn mul(self, rhs: f64) -> Self::Output {
82 | Vector { x: rhs * self.x, y: rhs * self.y, z: rhs * self.z }
83 | }
84 | }
85 |
86 | impl Mul for f64 {
87 | type Output = Vector;
88 | fn mul(self, rhs: Vector) -> Self::Output {
89 | rhs * self
90 | }
91 | }
92 |
93 | impl Index for Vector {
94 | type Output = f64;
95 | fn index(&self, index: usize) -> &Self::Output {
96 | match index {
97 | 0 => &self.x,
98 | 1 => &self.y,
99 | 2 => &self.z,
100 | _ => unreachable!()
101 | }
102 | }
103 | }
104 |
105 | impl IndexMut for Vector {
106 | fn index_mut(&mut self, index: usize) -> &mut Self::Output {
107 | match index {
108 | 0 => &mut self.x,
109 | 1 => &mut self.y,
110 | 2 => &mut self.z,
111 | _ => unreachable!()
112 | }
113 | }
114 | }
--------------------------------------------------------------------------------
/test/tower.obj:
--------------------------------------------------------------------------------
1 | # exported usin
2 |
3 |
4 | g main
5 |
6 | v 1.937737 12.0899 -10.99677
7 | v 0.7877367 12.0899 -9.004911
8 | v 2.375365 12.74846 -10.7441
9 | v 1.225365 12.74846 -8.752247
10 | v 5.035323 13.57145 -9.208378
11 | v 4.322589 13.6798 -9.619875
12 | v 3.885323 13.57145 -7.216519
13 | v 3.172589 13.6798 -7.628016
14 | v 2.945694 13.25379 -10.41483
15 | v 1.795694 13.25379 -8.422967
16 | v 1.558462 10.40934 -11.21574
17 | v 1.558462 -1.443823e-14 -11.21574
18 | v 0.4084617 10.40934 -9.223886
19 | v 0.4084617 -1.443823e-14 -9.223886
20 | v 1.662632 11.32299 -11.1556
21 | v 0.5126319 11.32299 -9.163744
22 | v 5.699485 13.25379 -8.824924
23 | v 4.549485 13.25379 -6.833065
24 | v 0.3605232 -1.263345e-14 -11.90738
25 | v 0.3605232 10.5 -11.90738
26 | v 0.4955273 11.6841 -11.82943
27 | v 0.8913394 12.7875 -11.60091
28 | v 1.520985 13.73501 -11.23738
29 | v 3.609856 13.57145 -10.03137
30 | v 7.124193 13.73501 -8.002368
31 | v 6.303623 14.46207 -8.476125
32 | v 2.341556 14.46207 -10.76363
33 | v 3.297131 14.91911 -10.21192
34 | v 5.348048 14.91911 -9.027825
35 | v 4.322589 15.075 -9.619875
36 | v 7.753839 12.7875 -7.638842
37 | v 6.269813 12.74846 -8.495645
38 | v 6.707442 12.0899 -8.242979
39 | v 8.149652 11.6841 -7.410319
40 | v 6.982547 11.32299 -8.084147
41 | v 8.284656 10.5 -7.332375
42 | v 7.086717 10.40934 -8.024005
43 | v 8.284656 -1.443823e-14 -7.332375
44 | v 7.086717 -1.443823e-14 -8.024005
45 | v 5.99993 10.5 -3.375115
46 | v 6.517124 3.609557e-15 -4.27092
47 | v 5.557442 12.0899 -6.251121
48 | v 5.832547 11.32299 -6.092289
49 | v 2.845653 14.91911 -4.693551
50 | v 1.812516 15.075 -5.2723
51 | v 5.35644 12.7875 -3.486424
52 | v 5.806602 11.6841 -3.352039
53 | v 0.7947363 14.91911 -5.877648
54 | v -0.1383262 14.46207 -6.468342
55 | v 2.459856 13.57145 -8.039514
56 | v 5.119814 12.74846 -6.503786
57 | v 5.936717 10.40934 -6.032146
58 | v 5.936717 -1.443823e-14 -6.032146
59 | v -0.07250007 -1.804779e-15 -11.15736
60 | v -1.924202 10.5 -7.950115
61 | v -0.1042472 0.146064 -11.10237
62 | v -1.295037 5.7 -9.039861
63 | v -1.68777 5.7 -8.359627
64 | v -1.50606 12.7875 -7.44849
65 | v -0.9230849 13.73501 -7.004127
66 | v 4.680123 13.73501 -3.769114
67 | v 1.840596 17.00226 10.14533
68 | v 2.098145 17.22841 11.18921
69 | v 2.363066 17.1052 11.05028
70 | v 1.575674 17.12547 10.28427
71 | v 1.020107 17.12547 10.60502
72 | v 1.289794 17.1052 11.66993
73 | v 1.542578 17.22841 11.50997
74 | v 0.7673235 17.00226 10.76498
75 | v 0.9885922 12.32545 12.38754
76 | v 2.612665 12.22251 10.24329
77 | v 3.135136 12.32545 11.14823
78 | v 0.4661213 12.22251 11.48259
79 | v 2.952313 16.03709 10.83157
80 | v 2.429842 15.93415 9.926626
81 | v 2.255677 16.55082 9.957033
82 | v 2.900019 16.35631 10.82545
83 | v 2.377548 16.25336 9.920507
84 | v 2.778147 16.65376 10.86198
85 | v 2.072532 16.80626 10.03372
86 | v 2.595003 16.9092 10.93866
87 | v 1.818292 17.27043 11.34601
88 | v 1.295821 17.16749 10.44106
89 | v 0.2832985 15.93415 11.16593
90 | v 0.8266169 16.35631 12.02253
91 | v 0.3041461 16.25336 11.11759
92 | v 0.8057693 16.03709 12.07088
93 | v 0.8988715 12.74963 11.17278
94 | v 2.127986 12.74963 10.46315
95 | v 0.7437149 15.8996 10.90404
96 | v 0.7578319 16.11576 10.8713
97 | v 0.8104954 16.28498 10.82165
98 | v 0.3967147 16.55082 11.03031
99 | v 0.900373 16.43031 10.75323
100 | v 1.02134 16.54181 10.6707
101 | v 1.165152 16.61191 10.5797
102 | v 0.5546959 16.80626 10.91004
103 | v 1.322009 16.63582 10.48642
104 | v 1.481221 16.61191 10.39722
105 | v 1.631939 16.54181 10.31817
106 | v 1.763891 16.43031 10.25467
107 | v 1.868084 16.28498 10.21105
108 | v 1.937419 16.11576 10.19027
109 | v 1.97283 15.8996 10.19441
110 | v 0.9191856 16.65376 11.93525
111 | v 1.077167 16.9092 11.81499
112 | v 3.82374 14.46207 -4.180842
113 | v -3.209539 5.7 -9.238218
114 | v -3.209539 20.65 -7.537612
115 | v -1.847522 11.6841 -7.771149
116 | v 6.057799 20.65 -2.187112
117 | v 8.092093 2.346212e-14 -3.361612
118 | v -8.772689 29.20946 -4.325726
119 | v -8.077127 29.46613 -3.514874
120 | v -8.602126 29.46613 -4.424201
121 | v -8.247689 29.20946 -3.416399
122 | v -8.120991 29.78689 -4.701983
123 | v -7.854844 29.66308 -3.643208
124 | v -7.595992 29.78689 -3.792657
125 | v -8.379844 29.66308 -4.552535
126 | v -8.391479 24.86019 -3.333381
127 | v -8.91648 28.58981 -4.242707
128 | v -8.91648 24.86019 -4.242707
129 | v -8.391479 28.58981 -3.333381
130 | v -7.565425 29.78689 -5.02274
131 | v -7.318208 29.82912 -3.953035
132 | v -7.040425 29.78689 -4.113413
133 | v -7.843208 29.82912 -4.862361
134 | v -8.87991 28.91056 -4.263822
135 | v -8.35491 28.91056 -3.354495
136 | v -7.306571 29.66308 -5.172189
137 | v -6.781572 29.66308 -4.262862
138 | v -6.244936 24.86019 -4.572689
139 | v -6.703651 25.38987 -4.30785
140 | v -6.244936 28.58981 -4.572689
141 | v -6.703651 28.55509 -4.30785
142 | v -6.728415 28.77229 -4.293552
143 | v -6.281507 28.91056 -4.551575
144 | v -6.789413 28.94234 -4.258335
145 | v -6.388727 29.20946 -4.489671
146 | v -6.886449 29.08836 -4.202312
147 | v -7.012908 29.20041 -4.1293
148 | v -7.160173 29.27084 -4.044276
149 | v -6.55929 29.46613 -4.391197
150 | v -7.318208 29.29487 -3.953035
151 | v -7.932765 25.38987 -3.59822
152 | v -7.932765 28.55509 -3.59822
153 | v -7.908001 28.77229 -3.612518
154 | v -7.847003 28.94234 -3.647735
155 | v -7.749967 29.08836 -3.703759
156 | v -7.623507 29.20041 -3.77677
157 | v -7.476243 29.27084 -3.861794
158 | v -7.08429 29.46613 -5.300523
159 | v -6.913727 29.20946 -5.398998
160 | v -6.806507 28.91056 -5.460902
161 | v -6.769936 24.86019 -5.482016
162 | v -6.769936 28.58981 -5.482016
163 | v 3.628346 34.55 5.646564
164 | v 6.057799 34.55 5.646564
165 | v 3.628346 37.15 5.646564
166 | v 6.057799 37.15 5.646564
167 | v -4.477989 34.55 10.32676
168 | v -5.692715 34.55 12.43073
169 | v -6.628482 34.55 9.085171
170 | v -7.843208 34.55 11.18914
171 | v -8.778975 34.55 7.843583
172 | v -9.993701 34.55 9.947551
173 | v 6.057799 34.55 0.6802126
174 | v 6.057799 34.55 3.163388
175 | v 3.628346 34.55 0.6802126
176 | v 3.628346 34.55 3.163388
177 | v -4.477989 34.55 -3.999982
178 | v -6.628482 34.55 -2.758394
179 | v -5.692715 34.55 -6.10395
180 | v -7.843208 34.55 -4.862361
181 | v -8.778975 34.55 -1.516806
182 | v -9.993701 34.55 -3.620774
183 | v -1.94109 37.15 10.32676
184 | v -1.94109 34.55 10.32676
185 | v -0.7263635 37.15 12.43073
186 | v -0.7263635 34.55 12.43073
187 | v -12.47688 32.8 -2.187112
188 | v -12.47688 37.15 -2.187112
189 | v -9.993701 37.15 -3.620774
190 | v -3.209539 32.8 -7.537612
191 | v -3.209539 37.15 -7.537612
192 | v -5.692715 37.15 -6.10395
193 | v -4.477989 37.15 10.32676
194 | v -5.692715 37.15 12.43073
195 | v 3.628346 37.15 -0.7844667
196 | v 3.628346 32.65 -0.7844667
197 | v 3.628346 32.65 7.111243
198 | v 3.628346 37.15 7.111243
199 | v 3.628346 37.15 0.6802126
200 | v -12.47688 34.55 0.6802126
201 | v -12.47688 32.8 8.513888
202 | v -12.47688 34.55 3.163388
203 | v -12.47688 34.55 5.646564
204 | v -12.47688 37.15 5.646564
205 | v -12.47688 37.15 8.513888
206 | v -12.47688 37.15 0.6802126
207 | v -8.778975 37.15 7.843583
208 | v -9.993701 37.15 9.947551
209 | v -10.04742 37.15 5.646564
210 | v -10.04742 34.55 5.646564
211 | v -10.04742 37.15 7.111243
212 | v -10.04742 32.65 7.111243
213 | v -10.04742 34.55 3.163388
214 | v -10.04742 34.55 0.6802126
215 | v -10.04742 32.65 -0.7844667
216 | v -10.04742 37.15 0.6802126
217 | v -10.04742 37.15 -0.7844667
218 | v -3.209539 32.65 11.0591
219 | v -3.209539 37.15 11.0591
220 | v 2.359897 34.55 7.843583
221 | v 0.2094035 34.55 9.085171
222 | v 2.359897 37.15 7.843583
223 | v -3.209539 32.65 -4.732322
224 | v -3.209539 37.15 -4.732322
225 | v -4.477989 37.15 -3.999982
226 | v -8.778975 37.15 -1.516806
227 | v -0.7263635 37.15 -6.10395
228 | v -1.94109 37.15 -3.999982
229 | v 3.574623 34.55 9.947551
230 | v 3.574623 37.15 9.947551
231 | v 1.42413 34.55 11.18914
232 | v -3.209539 37.15 13.86439
233 | v 6.057799 37.15 8.513888
234 | v -3.209539 32.8 13.86439
235 | v 6.057799 32.8 -2.187112
236 | v -0.7263635 34.55 -6.10395
237 | v 3.574623 34.55 -3.620774
238 | v 6.057799 37.15 -2.187112
239 | v 1.42413 34.55 -4.862361
240 | v 3.574623 37.15 -3.620774
241 | v 6.057799 32.8 8.513888
242 | v 2.359897 34.55 -1.516806
243 | v 2.359897 37.15 -1.516806
244 | v 0.2094035 34.55 -2.758394
245 | v -1.94109 34.55 -3.999982
246 | v 6.057799 37.15 0.6802126
247 | v 7.530568 5.7 9.364192
248 | v 6.057799 20.65 8.513888
249 | v 5.227818 5.7 10.69368
250 | v -3.209539 2.52669e-14 16.21339
251 | v 4.619342 1.804779e-14 11.69338
252 | v -3.209539 20.65 13.86439
253 | v 12.9 1.804779e-14 5.676361
254 | v 10.71414 1.443823e-14 8.833142
255 | v 10.07735 2.165734e-14 -0.2950022
256 | v 7.464141 1.263345e-14 13.33583
257 | v 10.71414 1.082867e-14 11.45944
258 | v 8.092093 2.165734e-14 -0.4582201
259 | v -3.270965 9.023893e-15 -13.00399
260 | v -9.215218 1.443823e-14 12.74601
261 | v -3.484773 1.263345e-14 -12.88055
262 | v -5.228055 1.985256e-14 -15.9
263 | v -11.83294 2.346212e-14 -15.9
264 | v -12.70369 2.346212e-14 -4.405159
265 | v -14.96017 5.414336e-15 15.33996
266 | v -14.51117 1.804779e-14 2.58515
267 | v -14.51117 2.707168e-14 -3.361612
268 | v -19.6679 7.219114e-15 4.913502
269 | v -20.32389 7.219114e-15 11.48573
270 | v -13.74227 2.165734e-14 -7.767055
271 | v -15.13538 2.346212e-14 -10.18
272 | v -14.19348 2.165734e-14 -6.98554
273 | v 1.942002 22.59874 11.35203
274 | v 1.742002 22.59874 11.00561
275 | v 0.5407436 22.59874 12.16104
276 | v 0.3407436 22.59874 11.81463
277 | v 0.3407436 23.59874 11.81463
278 | v 0.5407436 23.59874 12.16104
279 | v -12.47688 28.03858 3.54715
280 | v -12.47688 28.03858 5.569692
281 | v -12.87688 28.03858 3.54715
282 | v -12.87688 28.03858 5.569692
283 | v -12.47688 20.65 -2.187112
284 | v -12.47688 20.65 8.513888
285 | v -14.29375 2.20704 4.746354
286 | v -14.29375 2.20704 9.562859
287 | v -12.87688 29.05615 5.578849
288 | v -12.87688 30.05615 5.578849
289 | v -12.87688 29.05615 7.196884
290 | v -12.87688 30.05615 7.196884
291 | v 1.742002 23.59874 11.00561
292 | v 1.942002 23.59874 11.35203
293 | v 2.474757 24.15882 -4.717662
294 | v 2.474757 25.40882 -4.717662
295 | v 2.274757 24.15882 -4.371252
296 | v 2.274757 25.40882 -4.371252
297 | v -12.87688 26.78858 3.54715
298 | v -12.87688 26.78858 5.569692
299 | v 6.057799 31.45 -2.187112
300 | v 6.057799 22 -2.187112
301 | v 6.057799 31.45 8.513888
302 | v 6.057799 22 8.513888
303 | v -12.47688 29.05615 5.578849
304 | v -12.47688 29.05615 7.196884
305 | v -12.47688 26.78858 5.569692
306 | v -12.47688 30.05615 7.196884
307 | v -12.47688 30.05615 5.578849
308 | v 0.532813 24.63117 12.16562
309 | v 0.3328131 24.63117 11.81921
310 | v -1.21876 24.63117 13.17689
311 | v -1.41876 24.63117 12.83048
312 | v -1.41876 25.88117 12.83048
313 | v -1.21876 25.88117 13.17689
314 | v 0.3328131 25.88117 11.81921
315 | v 0.532813 25.88117 12.16562
316 | v 4.226331 24.15882 -3.706391
317 | v 4.02633 24.15882 -3.35998
318 | v -12.47688 26.78858 3.54715
319 | v -3.209539 22 13.86439
320 | v -3.209539 31.45 13.86439
321 | v -12.47688 22 8.513888
322 | v -12.47688 31.45 8.513888
323 | v 4.226331 25.40882 -3.706391
324 | v 4.02633 25.40882 -3.35998
325 | v -3.209539 22 -7.537612
326 | v -3.209539 31.45 -7.537612
327 | v -12.47688 22 -2.187112
328 | v -12.47688 31.45 -2.187112
329 | v -11.16718 2.20704 11.36798
330 | v 7.975913 1.17933 0.6362727
331 | v 7.932203 1.623028 2.566747
332 | v 7.87467 2.20704 5.249041
333 | v 7.87467 2.20704 5.27373
334 | v 7.911412 1.834076 6.523213
335 | v 7.530568 5.7 7.219625
336 | v -11.12892 11.4 -4.017571
337 | v -7.526254 11.4 -6.09757
338 | v -5.350965 5.7 -8.001866
339 | v -6.067941 2.20704 -7.985255
340 | v -7.161982 2.20704 -7.353611
341 | v 1.317939 1.050174 -8.698799
342 | v 1.317939 5.170252 -8.698799
343 | v 1.317939 6.220426 -8.698799
344 | v 5.02724 5.170252 -6.557233
345 | v 5.02724 6.220426 -6.557233
346 | v 1.317939 10.3405 -8.698799
347 | v 1.3987 11.04884 -8.652172
348 | v 1.582163 11.56028 -8.546249
349 | v 1.874012 11.99947 -8.37775
350 | v 2.254357 12.33647 -8.158158
351 | v 2.697277 12.54831 -7.902438
352 | v 3.172589 12.62057 -7.628016
353 | v 3.647902 12.54831 -7.353595
354 | v 4.090822 12.33647 -7.097874
355 | v 4.471167 11.99947 -6.878282
356 | v 4.763016 11.56028 -6.709783
357 | v 4.946479 11.04884 -6.60386
358 | v 5.02724 10.3405 -6.557233
359 | v 5.02724 1.050174 -6.557233
360 | v 1.035671 6.380429 -7.995741
361 | v 4.559507 6.380429 -5.961253
362 | v 1.035671 10.2945 -7.995741
363 | v 4.559507 10.2945 -5.961253
364 | v 1.112394 10.96743 -7.951445
365 | v 4.482785 10.96743 -6.005549
366 | v 4.308495 11.45329 -6.106176
367 | v 1.286685 11.45329 -7.850819
368 | v 4.031238 11.87052 -6.26625
369 | v 1.563941 11.87052 -7.690744
370 | v 1.925268 12.19067 -7.482132
371 | v 3.669911 12.19067 -6.474863
372 | v 2.346043 12.39192 -7.239198
373 | v 3.249136 12.39192 -6.717797
374 | v 2.797589 12.46056 -6.978498
375 | v 1.035671 5.06725 -7.995741
376 | v 1.035671 1.153176 -7.995741
377 | v 4.559507 1.153176 -5.961253
378 | v 4.559507 5.06725 -5.961253
379 | v -16.67688 31.45 8.513888
380 | v -16.67688 31.45 -2.187112
381 | v -16.67688 32.8 8.513888
382 | v -16.67688 32.8 -2.187112
383 | v 8.157799 32.8 12.15119
384 | v 8.157799 31.45 12.15119
385 | v -1.109539 31.45 17.5017
386 | v -1.109539 32.8 17.5017
387 | v 8.157799 20.65 -5.824418
388 | v -1.109539 20.65 -11.17492
389 | v -1.109539 22 -11.17492
390 | v 8.157799 22 -5.824418
391 | v -5.309539 20.65 17.5017
392 | v -14.57688 20.65 12.15119
393 | v -5.309539 22 17.5017
394 | v -14.57688 22 12.15119
395 | v -3.270965 5.7 -10.14287
396 | v -0.0209651 9.023893e-15 -11.1276
397 | v -1.190965 5.7 -8.981765
398 | v -5.350965 5.7 -8.981765
399 | v -1.190965 5.7 -8.072795
400 | v -15.37844 2.20704 5.236108
401 | v -15.73446 2.20704 9.413525
402 | v -12.36549 2.20704 11.90904
403 | v 10.5442 0.3964554 7.702512
404 | v 8.27079 5.7 7.646993
405 | v 8.178321 1.686314 6.642291
406 | v 7.881367 2.20704 5.263754
407 | v -9.013893 2.20704 -9.755838
408 | v -8.552761 2.20704 -9.762507
409 | v -10.88653 11.4 -7.75774
410 | v -8.504643 11.4 -7.792191
411 | v -12.29148 1.391456 -9.683432
412 | v -12.10731 11.4 -5.71219
413 | v -12.82054 1.391456 -8.767073
414 | v -12.14217 1.393885 -9.932579
415 | v -11.5534 1.671037 -9.872339
416 | v -10.37939 2.20704 -9.755838
417 | v -5.123036 2.20704 -11.5997
418 | v -9.315158 2.20704 -11.53907
419 | v 6.190791 5.7 11.24966
420 | v -6.067941 2.20704 -10.29673
421 | v -4.795061 2.20704 -11.03163
422 | v 8.236341 5.7 10.02888
423 |
424 | vn 0.75 -0.5 0.4330127
425 | vn 0.6123725 -0.7071068 0.3535534
426 | vn -0.2241438 -0.9659258 -0.1294095
427 | vn 0 -1 0
428 | vn 0.4330127 -0.8660254 0.25
429 | vn 0.8660254 0 0.5
430 | vn 0.8365163 -0.258819 0.4829629
431 | vn -0.4330127 -0.8660254 -0.25
432 | vn 0.5 0 -0.8660254
433 | vn -0.75 -0.5 -0.4330127
434 | vn -0.8365163 -0.258819 -0.4829629
435 | vn 0.2241438 0.9659258 0.1294095
436 | vn 0.2223576 0.9664761 0.1283782
437 | vn 0 1 0
438 | vn 0.75 0.5 0.4330127
439 | vn 0.8365163 0.258819 0.4829629
440 | vn 0.7469063 0.5061369 0.4312266
441 | vn 0.8347195 0.2664417 0.4819255
442 | vn -0.2241438 0.9659258 -0.1294095
443 | vn -0.2223576 0.9664761 -0.1283782
444 | vn -0.4330127 0.8660254 -0.25
445 | vn -0.4299203 0.8680772 -0.2482146
446 | vn 0.2241438 -0.9659258 0.1294095
447 | vn -0.6123725 -0.7071068 -0.3535534
448 | vn -0.8586164 -0.1305262 -0.4957224
449 | vn -0.8660254 0 -0.5
450 | vn 0.8586164 -0.1305262 0.4957224
451 | vn -0.75 0.5 -0.4330127
452 | vn -0.6123725 0.7071068 -0.3535534
453 | vn -0.7469063 0.5061369 -0.4312266
454 | vn -0.6088029 0.7112046 -0.3514926
455 | vn 0.6123725 0.7071068 0.3535534
456 | vn 0.6088029 0.7112046 0.3514926
457 | vn 0.8586164 0.1305262 0.4957224
458 | vn -0.3905608 -0.8618534 0.3235288
459 | vn -0.1767949 -0.9612726 0.2114203
460 | vn 0.2714928 -0.9612726 -0.04739877
461 | vn 0.4754646 -0.8618534 -0.1764712
462 | vn -0.04901921 0.9951826 -0.08490377
463 | vn -0.8660254 0 0.5
464 | vn -0.7254904 -0.4975913 0.4754646
465 | vn -0.8238291 -0.2575722 0.5049376
466 | vn -0.5777107 -0.7037004 0.4135894
467 | vn -0.8522182 -0.1298974 0.5068046
468 | vn 0.04901921 -0.9951826 0.08490377
469 | vn 0.8650148 -0.1298974 -0.4846403
470 | vn 0.8492034 -0.2575722 -0.4609882
471 | vn 0.4975913 0.09803843 0.8618534
472 | vn 0.7745096 -0.4975913 -0.3905608
473 | vn 0.6470342 -0.7037004 -0.2935174
474 | vn 0.8660254 0 -0.5
475 | vn 0.4330127 0.8660254 0.25
476 | vn 0.4299203 0.8680772 0.2482146
477 | vn 0.4975913 0.09803843 -0.8618534
478 | vn -0.8586164 0.1305262 -0.4957224
479 | vn -0.8365163 0.258819 -0.4829629
480 | vn -0.8347195 0.2664417 -0.4819255
481 | vn 0.75 -0.5 -0.4330127
482 | vn 0.6123725 -0.7071068 -0.3535534
483 | vn 0.2241438 -0.9659258 -0.1294095
484 | vn 0.4330127 -0.8660254 -0.25
485 | vn -0.2241438 -0.9659258 0.1294095
486 | vn 0.8365163 -0.258819 -0.4829629
487 | vn -0.4330127 -0.8660254 0.25
488 | vn 0.8586164 -0.1305262 -0.4957224
489 | vn -0.5 0 -0.8660254
490 | vn -0.6123725 -0.7071068 0.3535534
491 | vn -0.75 -0.5 0.4330127
492 | vn -0.8365163 -0.258819 0.4829629
493 | vn -0.8586164 -0.1305262 0.4957224
494 | vn 0 0 -1
495 | vn -1 0 0
496 | vn 1 0 0
497 | vn 0.5 0 0.8660254
498 | vn -0.5 0 0.8660254
499 | vn 0 0 1
500 | vn -0.9951826 0.09803843 0
501 | vn -0.4975913 0.09803843 0.8618534
502 | vn 0.9951826 0.09803843 0
503 | vn -0.4975913 0.09803843 -0.8618534
504 | vn 0.3905608 0.8618534 -0.3235288
505 | vn 0.1767949 0.9612726 -0.2114203
506 | vn -0.2714928 0.9612726 0.04739877
507 | vn -0.4754646 0.8618534 0.1764712
508 | vn 0.8238291 0.2575722 -0.5049376
509 | vn 0.7254904 0.4975913 -0.4754646
510 | vn 0.5777107 0.7037004 -0.4135894
511 | vn 0.8522182 0.1298974 -0.5068046
512 | vn -0.4975913 -0.09803843 -0.8618534
513 | vn -0.8492034 0.2575722 0.4609882
514 | vn -0.8650148 0.1298974 0.4846403
515 | vn -0.7745096 0.4975913 0.3905608
516 | vn -0.6470342 0.7037004 0.2935174
517 | vn -0.6123725 0.7071068 0.3535534
518 | vn -0.75 0.5 0.4330127
519 | vn -0.2241438 0.9659258 0.1294095
520 | vn -0.4330127 0.8660254 0.25
521 | vn 0.2241438 0.9659258 -0.1294095
522 | vn -0.8365163 0.258819 0.4829629
523 | vn 0.4330127 0.8660254 -0.25
524 | vn -0.8586164 0.1305262 0.4957224
525 | vn 0.6123725 0.7071068 -0.3535534
526 | vn 0.8365163 0.258819 -0.4829629
527 | vn 0.75 0.5 -0.4330127
528 | vn 0.8586164 0.1305262 -0.4957224
529 | vn -0.7866628 0 -0.6173829
530 | vn 0.9280006 0 0.3725785
531 | vn -0.114923 -0.9455058 -0.3046497
532 | vn 0.1043215 -0.9779919 -0.1806901
533 | vn -0.1174325 -0.9447489 -0.3060375
534 | vn 0.8237633 -0.4965369 0.2736151
535 | vn 0.8278846 -0.4879005 0.2766949
536 | vn 0.6933903 -0.6971737 0.1820956
537 | vn 0.6982296 -0.6914623 0.1853518
538 | vn 0.06802942 -0.9907007 -0.1178304
539 | vn 0.06802942 0.9907007 -0.1178304
540 | vn 0.321296 -0.9455058 -0.0527986
541 | vn 0.5220349 -0.8499796 0.07081078
542 | vn 0.3237525 -0.944749 -0.0513192
543 | vn 0.5262603 -0.8471427 0.07347948
544 | vn 0.9231275 -0.1290905 0.3621758
545 | vn 0.9038911 -0.2608779 0.3390038
546 | vn 0.9061326 -0.2500418 0.3411786
547 | vn -0.6488392 -0.496537 -0.5765923
548 | vn -0.5043945 -0.6971737 -0.5094457
549 | vn -0.6535671 -0.4879005 -0.5786217
550 | vn -0.5096342 -0.6914623 -0.5120087
551 | vn -0.3223414 -0.8499796 -0.4166902
552 | vn -0.3267652 -0.8471427 -0.419015
553 | vn -0.7455314 -0.2608779 -0.6132908
554 | vn -0.7485356 -0.2500418 -0.6141446
555 | vn 0.1043215 0.9779919 -0.1806901
556 | vn -0.7752171 -0.1290905 -0.618364
557 | vn 0.4585485 0.3986638 -0.7942294
558 | vn 0.4573504 0.3981448 -0.79518
559 | vn 0.4514354 0.3955753 -0.7998289
560 | vn 0.4561015 0.3976033 -0.7961677
561 | vn 0.4479815 0.3940692 -0.8025098
562 | vn 0.4491888 0.3945962 -0.8015755
563 | vn -0.2670244 0.8937271 0.3604858
564 | vn -0.266687 0.891338 0.3665989
565 | vn -0.2666997 0.8914276 0.3663716
566 | vn -0.3008876 0.6821936 -0.6663922
567 | vn -0.4548661 0.8897156 -0.03876682
568 | vn -0.4516767 0.8911796 -0.04227264
569 | vn -0.4518283 0.8911107 -0.04210635
570 | vn -0.2664478 0.8896695 0.3708013
571 | vn 0.4897883 0.201071 -0.8483384
572 | vn 0.3712459 0.8922417 0.2570629
573 | vn 0.3745512 0.8911796 0.2559497
574 | vn 0.3733873 0.8915552 0.2563423
575 | vn -0.007960862 0.2108364 -0.9774889
576 | vn -0.01414051 0.2096193 -0.9776808
577 | vn -0.01147535 0.2101453 -0.9776029
578 | vn 0.3008876 0.6821936 0.6663922
579 | vn -0.4493256 0.8922417 -0.04484865
580 | vn -0.8420265 0.2122673 -0.4959172
581 | vn -0.8403984 0.2131763 -0.4982834
582 | vn -0.8467942 0.2095695 -0.4888969
583 | vn 0 0.2123919 -0.9771845
584 | vn -0.002977317 0.8911106 -0.4537762
585 | vn -0.006602034 0.8897156 -0.4564673
586 | vn -0.002796784 0.8911796 -0.4536419
587 | vn -0.838799 0.2140632 -0.5005929
588 | vn -0.4897883 0.201071 0.8483384
589 | vn -0.4595581 0.3939864 -0.795978
590 | vn -0.4509782 0.3988635 -0.7984526
591 | vn -0.4563945 0.3957927 -0.7969016
592 | vn 0.3790403 0.8897156 0.2544297
593 | vn 0.9157971 0.4014229 0.01324545
594 | vn 0.9169694 0.3988635 0.008667684
595 | vn 0.9183342 0.3957926 0.003201588
596 | vn 0.8615001 0.1020953 -0.4973873
597 | vn -0.4464276 0.4014229 -0.7997262
598 | vn 0.4108813 0.8914276 -0.1911372
599 | vn 0.4111923 0.8911458 -0.1917812
600 | vn 0.4128085 0.8896695 -0.1951337
601 | vn 0.4614508 0.3976033 0.7930793
602 | vn 0.4710032 0.3940691 0.7892182
603 | vn 0.4669545 0.3955754 0.790869
604 | vn 0.9191163 0.3939864 0
605 | vn -0.3895458 0.8920249 -0.2292284
606 | vn -0.3954314 0.8896695 -0.2283024
607 | vn -0.3910486 0.8914276 -0.2289931
608 | vn 0.4585485 0.3986638 0.7942294
609 | vn -0.8615001 0.1020953 0.4973873
610 | vn 0.6332132 0.6821936 -0.3655858
611 | vn -0.6332132 0.6821936 0.3655858
612 | vn -0.9795767 0.201071 0
613 | vn 0.05991111 0.6821936 -0.728713
614 | vn 0 0.8922417 -0.4515582
615 | vn 0.4083117 0.8937271 -0.1858321
616 | vn -0.3852243 0.8937271 -0.2299007
617 |
618 | vt 82.61694 57.21212
619 | vt 64.5067 57.21212
620 | vt 82.61694 63.74831
621 | vt 64.5067 63.74831
622 | vt -82.61694 15.84897
623 | vt -82.61694 22.38515
624 | vt -64.5067 15.84897
625 | vt -64.5067 22.38515
626 | vt 82.61694 46.93668
627 | vt 82.61694 40.4005
628 | vt 64.5067 46.93668
629 | vt 64.5067 40.4005
630 | vt 82.61694 81.96328
631 | vt 82.61694 -1.136868e-13
632 | vt 64.5067 81.96328
633 | vt 64.5067 -1.136868e-13
634 | vt 82.61694 69.90211
635 | vt 64.5067 69.90211
636 | vt 82.61694 76.4383
637 | vt 64.5067 76.4383
638 | vt -82.61694 36.12924
639 | vt -82.61694 42.66542
640 | vt -64.5067 36.12924
641 | vt -64.5067 42.66542
642 | vt 33.52917 -1.312356e-13
643 | vt 33.52917 81.96328
644 | vt 44.42099 -1.170247e-13
645 | vt 44.42099 82.67716
646 | vt 32.58204 89.15743
647 | vt 43.19351 92.00076
648 | vt 30.08076 95.19608
649 | vt 39.59473 100.689
650 | vt 26.10178 100.3816
651 | vt 20.91628 104.3606
652 | vt 33.86991 108.1497
653 | vt 14.87763 106.8618
654 | vt 8.397364 107.715
655 | vt -17.07518 108.1497
656 | vt -9.614448 113.8745
657 | vt 26.40917 113.8745
658 | vt 17.72096 117.4733
659 | vt -0.9262361 117.4733
660 | vt 8.397364 118.7008
661 | vt 1.917098 106.8618
662 | vt -4.121549 104.3606
663 | vt -22.80001 100.689
664 | vt -9.307052 100.3816
665 | vt -13.28603 95.19608
666 | vt -26.39878 92.00076
667 | vt -15.78732 89.15743
668 | vt -27.62626 82.67716
669 | vt -16.73445 81.96328
670 | vt -27.62626 -1.312356e-13
671 | vt -16.73445 -1.312356e-13
672 | vt 82.61694 82.67716
673 | vt 82.61694 -1.203816e-13
674 | vt 46.63701 82.67716
675 | vt 54.78179 2.172692e-14
676 | vt -82.61694 82.86536
677 | vt -64.5067 82.86536
678 | vt -82.61694 76.32918
679 | vt -64.5067 76.32918
680 | vt 82.61694 14.41503
681 | vt 43.20914 14.41503
682 | vt 82.61694 23.81908
683 | vt 43.08822 23.81908
684 | vt 82.61694 84.2993
685 | vt 82.61694 74.89525
686 | vt 44.86262 84.2993
687 | vt 45.71852 74.89525
688 | vt -82.61694 28.58306
689 | vt -43.20914 28.58306
690 | vt -82.61694 19.179
691 | vt -43.56367 19.179
692 | vt 82.61694 5.734105
693 | vt 82.61694 -0.802079
694 | vt 64.5067 5.734105
695 | vt 64.5067 -0.802079
696 | vt -82.61694 73.97229
697 | vt -64.5067 73.97229
698 | vt -82.61694 67.4361
699 | vt -64.5067 67.4361
700 | vt -82.61694 86.33401
701 | vt -64.5067 86.33401
702 | vt -82.61694 79.07779
703 | vt -64.5067 79.07779
704 | vt -82.61694 -1.136868e-13
705 | vt -82.61694 81.96328
706 | vt -64.5067 -1.136868e-13
707 | vt -64.5067 81.96328
708 | vt 82.61694 27.14912
709 | vt 82.61694 20.61294
710 | vt 64.5067 27.14912
711 | vt 64.5067 20.61294
712 | vt -82.61694 53.72466
713 | vt -82.61694 60.26084
714 | vt -64.5067 53.72466
715 | vt -64.5067 60.26084
716 | vt -82.61694 -5.763527e-14
717 | vt -82.61694 82.67716
718 | vt -75.79767 2.762986e-14
719 | vt -46.63701 82.67716
720 | vt -75.29771 1.15011
721 | vt -56.54512 44.88189
722 | vt -50.36034 44.88189
723 | vt 82.61694 76.88564
724 | vt 64.5067 76.88564
725 | vt 82.61694 84.14187
726 | vt 64.5067 84.14187
727 | vt -82.61694 55.77819
728 | vt -82.61694 65.18224
729 | vt -44.86262 55.77819
730 | vt -44.12764 65.18224
731 | vt 82.61694 75.40622
732 | vt 82.61694 66.00217
733 | vt 44.12764 75.40622
734 | vt 44.86262 66.00217
735 | vt 82.61694 87.76795
736 | vt 82.61694 78.3639
737 | vt 45.71852 87.76795
738 | vt 46.63701 78.3639
739 | vt -68.06483 93.33949
740 | vt -75.43644 97.86762
741 | vt -76.07151 95.40062
742 | vt -67.42976 95.80649
743 | vt 82.29486 38.06158
744 | vt 90.93661 37.6557
745 | vt 90.30154 40.12271
746 | vt 82.92993 35.59457
747 | vt -42.02853 97.45296
748 | vt -22.51188 89.18524
749 | vt -22.51188 97.45296
750 | vt -42.02853 89.18524
751 | vt -85.48483 126.2763
752 | vt -80.13605 96.2402
753 | vt -77.25695 125.4658
754 | vt -88.36394 97.05076
755 | vt -75.74889 130.7508
756 | vt -84.24011 129.0944
757 | vt -76.019 128.2178
758 | vt -83.97001 131.6274
759 | vt -74.46154 124.0902
760 | vt -82.98016 122.5809
761 | vt -74.77545 121.5621
762 | vt -82.66624 125.109
763 | vt -72.74767 108.7456
764 | vt -80.50226 112.5811
765 | vt -80.9092 110.0664
766 | vt -72.34072 111.2604
767 | vt -84.9353 130.8087
768 | vt -76.95998 127.4563
769 | vt -76.7081 129.9912
770 | vt -85.18718 128.2738
771 | vt -43.45704 90.46659
772 | vt -48.52156 97.48052
773 | vt -50.05618 95.4472
774 | vt -41.92242 92.49991
775 | vt 80.47005 41.42568
776 | vt 88.60381 44.37298
777 | vt 87.06919 46.4063
778 | vt 82.00468 39.39236
779 | vt 77.79293 119.0733
780 | vt 85.76825 122.4258
781 | vt 77.54105 121.6083
782 | vt 86.02013 119.8908
783 | vt 42.02853 87.92017
784 | vt 37.85784 92.09086
785 | vt 22.51188 87.92017
786 | vt 42.02853 117.2872
787 | vt 26.68257 92.09086
788 | vt 37.85784 117.0139
789 | vt 37.63268 118.7241
790 | vt 41.69603 119.8129
791 | vt 37.07807 120.063
792 | vt 40.72116 122.1664
793 | vt 36.19581 121.2128
794 | vt 35.04603 122.0951
795 | vt 33.70708 122.6497
796 | vt 39.17038 124.1874
797 | vt 32.2702 122.8389
798 | vt 25.37002 124.1874
799 | vt 27.39104 125.7382
800 | vt 37.14937 125.7382
801 | vt 34.79585 126.713
802 | vt 29.74456 126.713
803 | vt 32.2702 127.0455
804 | vt 30.83333 122.6497
805 | vt 23.81924 122.1664
806 | vt 29.49438 122.0951
807 | vt 28.3446 121.2128
808 | vt 27.46234 120.063
809 | vt 22.84438 119.8129
810 | vt 26.90772 118.7241
811 | vt 22.51188 117.2872
812 | vt 26.68257 117.0139
813 | vt 78.63775 103.6584
814 | vt 86.58876 107.0681
815 | vt 78.36765 106.1915
816 | vt 86.85886 104.535
817 | vt 80.52031 60.71457
818 | vt 89.08879 59.52059
819 | vt 88.68185 62.03531
820 | vt 80.92725 58.19984
821 | vt 80.13605 96.2402
822 | vt 85.48483 126.2763
823 | vt 77.25695 125.4658
824 | vt 88.36394 97.05076
825 | vt 79.61699 82.57188
826 | vt 87.50778 86.1187
827 | vt 79.30308 85.09989
828 | vt 87.82169 83.59068
829 | vt 82.61694 52.29072
830 | vt 44.12764 52.29072
831 | vt 82.61694 61.69477
832 | vt 43.56367 61.69477
833 | vt -82.61694 7.168039
834 | vt -43.08822 7.168039
835 | vt -82.61694 -2.236013
836 | vt -43.20914 -2.236013
837 | vt -82.61694 48.37062
838 | vt -43.56367 48.37062
839 | vt -82.61694 38.96657
840 | vt -44.12764 38.96657
841 | vt 58.2571 39.72843
842 | vt 44.42099 39.72843
843 | vt 51.5618 158.0148
844 | vt 44.42099 77.70666
845 | vt 43.19351 87.07539
846 | vt 39.59473 95.80566
847 | vt 33.86991 103.3025
848 | vt 26.40917 109.055
849 | vt 17.72096 112.6712
850 | vt 8.397364 113.9047
851 | vt -32.69804 158.0148
852 | vt -0.9262361 112.6712
853 | vt -9.614448 109.055
854 | vt -17.07518 103.3025
855 | vt -22.80001 95.80566
856 | vt -26.39878 87.07539
857 | vt -27.62626 77.70666
858 | vt -41.94608 -5.370721
859 | vt -27.62626 -5.370721
860 | vt -82.61694 76.17175
861 | vt -82.61694 85.5758
862 | vt -46.63701 76.17175
863 | vt -45.71852 85.5758
864 | vt 82.61694 34.69531
865 | vt 43.56367 34.69531
866 | vt 82.61694 44.09936
867 | vt 43.20914 44.09936
868 | vt -82.61694 68.46819
869 | vt -82.61694 77.87224
870 | vt -45.71852 68.46819
871 | vt -44.86262 77.87224
872 | vt -64.03569 156.4182
873 | vt -55.76797 158.9656
874 | vt -64.03569 158.9656
875 | vt -55.76797 156.4182
876 | vt -64.03569 55.69567
877 | vt -55.76797 53.14824
878 | vt -55.76797 55.69567
879 | vt -64.03569 53.14824
880 | vt -55.76797 195.7495
881 | vt -64.03569 225.1166
882 | vt -64.03569 195.7495
883 | vt -55.76797 225.1166
884 | vt 64.03569 62.15655
885 | vt 55.76797 64.70399
886 | vt 55.76797 62.15655
887 | vt 64.03569 64.70399
888 | vt -64.03569 193.5654
889 | vt -55.76797 196.1128
890 | vt -64.03569 196.1128
891 | vt -55.76797 193.5654
892 | vt -64.03569 111.0719
893 | vt -55.76797 108.5245
894 | vt -55.76797 111.0719
895 | vt -64.03569 108.5245
896 | vt 64.03569 116.6011
897 | vt 55.76797 119.1485
898 | vt 55.76797 116.6011
899 | vt 64.03569 119.1485
900 | vt -64.03569 -3.389329
901 | vt -55.76797 -5.936764
902 | vt -55.76797 -3.389329
903 | vt -64.03569 -5.936764
904 | vt -64.03569 217.4346
905 | vt -55.76797 219.9821
906 | vt -64.03569 219.9821
907 | vt -55.76797 217.4346
908 | vt -24.58212 195.7495
909 | vt -28.75281 199.9202
910 | vt -44.09877 195.7495
911 | vt -24.58212 225.1166
912 | vt -28.75281 224.8432
913 | vt -28.97797 226.5535
914 | vt -24.91462 227.6422
915 | vt -29.53258 227.8924
916 | vt -25.88948 229.9958
917 | vt -30.41484 229.0422
918 | vt -31.56462 229.9245
919 | vt -32.90357 230.4791
920 | vt -27.44027 232.0168
921 | vt -34.34045 230.6682
922 | vt -39.92808 199.9202
923 | vt -44.09877 225.1166
924 | vt -39.92808 224.8432
925 | vt -39.70293 226.5535
926 | vt -43.76627 227.6422
927 | vt -39.14831 227.8924
928 | vt -42.7914 229.9958
929 | vt -38.26605 229.0422
930 | vt -37.11627 229.9245
931 | vt -35.77732 230.4791
932 | vt -41.24063 232.0168
933 | vt -29.46128 233.5676
934 | vt -39.21961 233.5676
935 | vt -31.8148 234.5424
936 | vt -36.86609 234.5424
937 | vt -34.34045 234.8749
938 | vt 64.03569 163.0127
939 | vt 55.76797 165.5601
940 | vt 55.76797 163.0127
941 | vt 64.03569 165.5601
942 | vt 64.03569 222.3959
943 | vt 55.76797 219.8484
944 | vt 64.03569 219.8484
945 | vt 55.76797 222.3959
946 | vt 55.76797 225.1166
947 | vt 64.03569 195.7495
948 | vt 64.03569 225.1166
949 | vt 55.76797 195.7495
950 | vt -66.07465 -26.2471
951 | vt -53.30658 -43.16548
952 | vt -49.17273 -36.00542
953 | vt -70.2085 -33.40715
954 | vt 64.03569 200.7759
955 | vt 55.76797 198.2284
956 | vt 64.03569 198.2284
957 | vt 55.76797 200.7759
958 | vt 64.03569 228.9467
959 | vt 55.76797 226.3993
960 | vt 64.03569 226.3993
961 | vt 55.76797 228.9467
962 | vt -28.56966 272.0472
963 | vt -47.6992 272.0472
964 | vt -28.56966 292.5197
965 | vt -47.6992 292.5197
966 | vt 35.25975 81.31306
967 | vt 44.82453 97.87973
968 | vt 52.19277 71.53678
969 | vt 61.75755 88.10345
970 | vt 69.12579 61.76049
971 | vt 78.69056 78.32717
972 | vt -47.6992 5.356005
973 | vt -47.6992 24.90857
974 | vt -28.56966 5.356005
975 | vt -47.6992 44.46113
976 | vt -28.56966 44.46113
977 | vt -28.56966 24.90857
978 | vt 35.25975 -31.49592
979 | vt 52.19277 -21.71964
980 | vt 44.82453 -48.0626
981 | vt 61.75755 -38.28631
982 | vt 69.12579 -11.94336
983 | vt 78.69056 -28.51003
984 | vt -62.77709 292.5197
985 | vt -62.77709 272.0472
986 | vt -81.90664 292.5197
987 | vt -81.90664 272.0472
988 | vt 34.34045 272.0472
989 | vt 53.89301 272.0472
990 | vt 76.47037 258.2677
991 | vt 76.47037 292.5197
992 | vt 53.89301 292.5197
993 | vt 14.78788 272.0472
994 | vt -7.789475 258.2677
995 | vt -7.789475 292.5197
996 | vt 14.78788 292.5197
997 | vt 88.04905 272.0472
998 | vt 88.04905 292.5197
999 | vt 107.1786 272.0472
1000 | vt 107.1786 292.5197
1001 | vt -6.176903 292.5197
1002 | vt 5.356005 272.0472
1003 | vt -6.176903 257.0866
1004 | vt 55.99404 257.0866
1005 | vt 24.90857 272.0472
1006 | vt 44.46113 272.0472
1007 | vt 44.46113 292.5197
1008 | vt 55.99404 292.5197
1009 | vt 5.356005 292.5197
1010 | vt -17.22135 292.5197
1011 | vt -17.22135 258.2677
1012 | vt 67.03849 258.2677
1013 | vt 67.03849 292.5197
1014 | vt -88.04905 292.5197
1015 | vt -88.04905 272.0472
1016 | vt -107.1786 292.5197
1017 | vt -107.1786 272.0472
1018 | vt -44.46113 292.5197
1019 | vt -44.46113 272.0472
1020 | vt -55.99404 292.5197
1021 | vt -55.99404 257.0866
1022 | vt -24.90857 272.0472
1023 | vt -5.356005 272.0472
1024 | vt 6.176903 257.0866
1025 | vt -5.356005 292.5197
1026 | vt 6.176903 292.5197
1027 | vt 65.42592 257.0866
1028 | vt 65.42592 292.5197
1029 | vt 3.254973 257.0866
1030 | vt 3.254973 292.5197
1031 | vt -65.42592 257.0866
1032 | vt -14.78788 272.0472
1033 | vt -3.254973 257.0866
1034 | vt -3.254973 292.5197
1035 | vt -14.78788 292.5197
1036 | vt -53.89301 272.0472
1037 | vt -65.42592 292.5197
1038 | vt -34.34045 272.0472
1039 | vt -53.89301 292.5197
1040 | vt 5.719398 -48.0626
1041 | vt 15.28417 -31.49592
1042 | vt 25.27196 -59.35127
1043 | vt 25.27196 -37.26237
1044 | vt 79.11358 -6.176903
1045 | vt 98.24313 -17.22135
1046 | vt 79.11358 5.356005
1047 | vt 98.24313 5.356005
1048 | vt 62.77709 272.0472
1049 | vt 62.77709 292.5197
1050 | vt 81.90664 272.0472
1051 | vt 81.90664 292.5197
1052 | vt -28.14664 78.32717
1053 | vt -11.21362 88.10345
1054 | vt -18.58187 61.76049
1055 | vt -1.648847 71.53678
1056 | vt 5.719398 97.87973
1057 | vt 15.28417 81.31306
1058 | vt 64.03569 292.5197
1059 | vt 64.03569 272.0472
1060 | vt 44.90615 292.5197
1061 | vt 44.90615 272.0472
1062 | vt 25.27196 109.1684
1063 | vt 25.27196 87.07951
1064 | vt -47.6992 67.03849
1065 | vt -28.56966 55.99404
1066 | vt 79.11358 272.0472
1067 | vt 79.11358 292.5197
1068 | vt 98.24313 272.0472
1069 | vt 98.24313 292.5197
1070 | vt 79.11358 24.90857
1071 | vt 79.11358 44.46113
1072 | vt 98.24313 44.46113
1073 | vt 98.24313 24.90857
1074 | vt -51.5618 258.2677
1075 | vt 10.12069 272.0472
1076 | vt 32.69804 258.2677
1077 | vt 32.69804 292.5197
1078 | vt 10.12069 292.5197
1079 | vt -28.98444 272.0472
1080 | vt -51.5618 292.5197
1081 | vt -9.431876 272.0472
1082 | vt -28.98444 292.5197
1083 | vt -32.69804 258.2677
1084 | vt 28.98444 272.0472
1085 | vt 51.5618 258.2677
1086 | vt 51.5618 292.5197
1087 | vt 28.98444 292.5197
1088 | vt -10.12069 272.0472
1089 | vt -32.69804 292.5197
1090 | vt 9.431876 272.0472
1091 | vt -10.12069 292.5197
1092 | vt -76.47037 258.2677
1093 | vt 7.789475 258.2677
1094 | vt 7.789475 292.5197
1095 | vt -76.47037 292.5197
1096 | vt -40.51735 257.0866
1097 | vt 21.6536 257.0866
1098 | vt 21.6536 292.5197
1099 | vt -40.51735 292.5197
1100 | vt -64.03569 272.0472
1101 | vt -64.03569 292.5197
1102 | vt -44.90615 272.0472
1103 | vt -44.90615 292.5197
1104 | vt 79.11358 55.99404
1105 | vt 98.24313 67.03849
1106 | vt -47.6992 -17.22135
1107 | vt -28.14664 -28.51003
1108 | vt -28.56966 -6.176903
1109 | vt -18.58187 -11.94336
1110 | vt 47.6992 272.0472
1111 | vt 28.56966 272.0472
1112 | vt 47.6992 292.5197
1113 | vt 28.56966 292.5197
1114 | vt 14.48478 35.49876
1115 | vt -22.51188 87.92017
1116 | vt 7.789475 153.7851
1117 | vt -22.51188 117.2872
1118 | vt -22.84438 119.8129
1119 | vt -23.81924 122.1664
1120 | vt -25.37002 124.1874
1121 | vt -27.39104 125.7382
1122 | vt -29.74456 126.713
1123 | vt -32.2702 127.0455
1124 | vt -42.02853 87.92017
1125 | vt -6.452126 35.49876
1126 | vt -85.7184 -9.600385
1127 | vt -14.53719 -9.600385
1128 | vt -76.47037 153.7851
1129 | vt -42.02853 117.2872
1130 | vt -41.69603 119.8129
1131 | vt -40.72116 122.1664
1132 | vt -39.17038 124.1874
1133 | vt -37.14937 125.7382
1134 | vt -34.79585 126.713
1135 | vt -101.5748 44.69576
1136 | vt -84.36331 69.5523
1137 | vt -79.34921 -2.322852
1138 | vt -58.77276 105.0065
1139 | vt -84.36331 90.2318
1140 | vt -63.71726 -3.608032
1141 | vt -51.31594 -33.62929
1142 | vt -63.71726 -26.46938
1143 | vt -36.37277 92.07387
1144 | vt -46.7458 -47.49722
1145 | vt -55.80092 -63.18114
1146 | vt -65.23351 -57.73523
1147 | vt -3.216234 -72.62903
1148 | vt 25.27196 127.6645
1149 | vt -2.838765 -93.75886
1150 | vt -12.27135 -88.31295
1151 | vt 0.5708667 -87.8532
1152 | vt 25.75563 -102.3936
1153 | vt 72.56077 100.3623
1154 | vt 27.43916 -101.4216
1155 | vt 41.16578 -125.1969
1156 | vt 93.17277 -125.1969
1157 | vt 100.0291 -34.68629
1158 | vt 117.7966 120.7871
1159 | vt 114.2612 20.35551
1160 | vt 114.2612 -26.46938
1161 | vt 154.8653 38.689
1162 | vt 160.0307 90.43884
1163 | vt 108.2069 -61.15791
1164 | vt 119.1763 -80.15748
1165 | vt 111.7597 -55.00426
1166 | vt -67.03849 292.5197
1167 | vt -67.03849 258.2677
1168 | vt 17.22135 258.2677
1169 | vt 17.22135 292.5197
1170 | vt -21.6536 257.0866
1171 | vt 40.51735 257.0866
1172 | vt 40.51735 292.5197
1173 | vt -21.6536 292.5197
1174 | vt 38.76373 292.5197
1175 | vt 38.76373 272.0472
1176 | vt 19.63418 292.5197
1177 | vt 19.63418 272.0472
1178 | vt -79.11358 272.0472
1179 | vt -98.24313 272.0472
1180 | vt -79.11358 292.5197
1181 | vt -98.24313 292.5197
1182 | vt 15.29136 89.38602
1183 | vt 13.71655 86.65838
1184 | vt 4.257824 95.75623
1185 | vt 2.683021 93.02859
1186 | vt 81.90664 177.9428
1187 | vt 81.90664 185.8168
1188 | vt 85.05624 177.9428
1189 | vt 85.05624 185.8168
1190 | vt 98.24313 27.93031
1191 | vt 98.24313 43.85584
1192 | vt 101.3927 27.93031
1193 | vt 101.3927 43.85584
1194 | vt -26.46938 -11.20199
1195 | vt -17.22135 152.1835
1196 | vt 20.35551 -11.20199
1197 | vt 67.03849 152.1835
1198 | vt 37.37286 6.260402
1199 | vt 75.2981 6.260402
1200 | vt 43.92795 228.7886
1201 | vt 43.92795 236.6626
1202 | vt 56.66837 228.7886
1203 | vt 56.66837 236.6626
1204 | vt -81.90664 185.8168
1205 | vt -81.90664 177.9428
1206 | vt -85.05624 185.8168
1207 | vt -85.05624 177.9428
1208 | vt -41.91334 190.227
1209 | vt -41.91334 200.0695
1210 | vt -38.76373 190.227
1211 | vt -38.76373 200.0695
1212 | vt -15.29136 89.38602
1213 | vt -4.257824 95.75623
1214 | vt -13.71655 86.65838
1215 | vt -2.683021 93.02859
1216 | vt 27.93031 210.9337
1217 | vt 27.93031 220.7762
1218 | vt 43.85584 210.9337
1219 | vt 43.85584 220.7762
1220 | vt 17.22135 247.6378
1221 | vt 17.22135 173.2283
1222 | vt -67.03849 247.6378
1223 | vt -67.03849 173.2283
1224 | vt -98.24313 43.92795
1225 | vt -101.3927 43.92795
1226 | vt -98.24313 56.66837
1227 | vt -101.3927 56.66837
1228 | vt -98.24313 210.9337
1229 | vt -101.3927 210.9337
1230 | vt -98.24313 220.7762
1231 | vt -101.3927 220.7762
1232 | vt -98.24313 228.7886
1233 | vt -101.3927 228.7886
1234 | vt -98.24313 236.6626
1235 | vt -101.3927 236.6626
1236 | vt 98.24313 43.92795
1237 | vt 98.24313 56.66837
1238 | vt 101.3927 43.92795
1239 | vt 101.3927 56.66837
1240 | vt 4.195378 95.79229
1241 | vt 2.620575 93.06465
1242 | vt -9.596537 103.7551
1243 | vt -11.17134 101.0274
1244 | vt -31.45031 177.9428
1245 | vt -44.19073 177.9428
1246 | vt -31.45031 185.8168
1247 | vt -44.19073 185.8168
1248 | vt 81.90664 193.9462
1249 | vt 81.90664 203.7887
1250 | vt 85.05624 193.9462
1251 | vt 85.05624 203.7887
1252 | vt -81.90664 203.7887
1253 | vt -81.90664 193.9462
1254 | vt -85.05624 203.7887
1255 | vt -85.05624 193.9462
1256 | vt 33.27819 -29.18418
1257 | vt 19.48628 -37.14694
1258 | vt 31.70339 -26.45654
1259 | vt 17.91148 -34.4193
1260 | vt 101.3927 210.9337
1261 | vt 98.24313 210.9337
1262 | vt 101.3927 220.7762
1263 | vt 98.24313 220.7762
1264 | vt -76.47037 173.2283
1265 | vt 7.789475 173.2283
1266 | vt 7.789475 247.6378
1267 | vt -44.26284 193.9462
1268 | vt -44.26284 203.7887
1269 | vt -60.18837 203.7887
1270 | vt -60.18837 193.9462
1271 | vt -76.47037 247.6378
1272 | vt 32.69804 173.2283
1273 | vt -51.5618 173.2283
1274 | vt 32.69804 247.6378
1275 | vt -51.5618 247.6378
1276 | vt 41.91334 200.0695
1277 | vt 41.91334 190.227
1278 | vt 38.76373 200.0695
1279 | vt 38.76373 190.227
1280 | vt -4.195378 95.79229
1281 | vt 9.596537 103.7551
1282 | vt -2.620575 93.06465
1283 | vt 11.17134 101.0274
1284 | vt 101.3927 228.7886
1285 | vt 98.24313 228.7886
1286 | vt 101.3927 236.6626
1287 | vt 98.24313 236.6626
1288 | vt -98.24313 27.93031
1289 | vt -101.3927 27.93031
1290 | vt -98.24313 43.85584
1291 | vt -101.3927 43.85584
1292 | vt -33.27819 -29.18418
1293 | vt -31.70339 -26.45654
1294 | vt -19.48628 -37.14694
1295 | vt -17.91148 -34.4193
1296 | vt 1.697859 190.227
1297 | vt -14.22767 190.227
1298 | vt 1.697859 200.0695
1299 | vt -14.22767 200.0695
1300 | vt -32.69804 173.2283
1301 | vt 51.5618 173.2283
1302 | vt 51.5618 247.6378
1303 | vt -32.69804 247.6378
1304 | vt -17.22135 173.2283
1305 | vt -17.22135 247.6378
1306 | vt 67.03849 173.2283
1307 | vt 67.03849 247.6378
1308 | vt 76.47037 173.2283
1309 | vt 44.09877 195.7495
1310 | vt 76.47037 247.6378
1311 | vt 44.09877 225.1166
1312 | vt 43.76627 227.6422
1313 | vt 42.7914 229.9958
1314 | vt 41.24063 232.0168
1315 | vt 39.21961 233.5676
1316 | vt 36.86609 234.5424
1317 | vt 34.34045 234.8749
1318 | vt -7.789475 247.6378
1319 | vt 24.58212 195.7495
1320 | vt -7.789475 173.2283
1321 | vt 24.58212 225.1166
1322 | vt 24.91462 227.6422
1323 | vt 25.88948 229.9958
1324 | vt 27.44027 232.0168
1325 | vt 29.46128 233.5676
1326 | vt 31.8148 234.5424
1327 | vt -12.65833 -12.07801
1328 | vt -31.39429 5.384383
1329 | vt 41.94608 -12.07801
1330 | vt 32.69804 151.3075
1331 | vt -51.5618 151.3075
1332 | vt -59.82141 5.384383
1333 | vt 26.46938 -6.246741
1334 | vt 3.608032 -6.246741
1335 | vt 17.22135 157.1388
1336 | vt -67.03849 157.1388
1337 | vt -5.010021 3.084274
1338 | vt -20.21061 6.594869
1339 | vt -41.33103 11.21565
1340 | vt -41.52544 11.21565
1341 | vt -51.36389 8.264707
1342 | vt -56.84744 38.85241
1343 | vt -73.7338 38.85241
1344 | vt 69.28458 -7.848345
1345 | vt 60.07198 82.34995
1346 | vt 85.7184 -7.848345
1347 | vt 76.47037 155.5372
1348 | vt -7.789475 155.5372
1349 | vt 27.31608 82.34995
1350 | vt -14.48478 37.2508
1351 | vt 4.985342 37.2508
1352 | vt 9.939871 9.614046
1353 | vt 19.88704 9.614046
1354 | vt -38.76373 272.0472
1355 | vt -38.76373 292.5197
1356 | vt -19.63418 272.0472
1357 | vt -19.63418 292.5197
1358 | vt -11.21362 -38.28631
1359 | vt -1.648847 -21.71964
1360 | vt -16.73445 -6.805461e-14
1361 | vt 25.26009 8.269083
1362 | vt 33.52917 -6.805461e-14
1363 | vt 25.26009 40.71065
1364 | vt 25.26009 48.97973
1365 | vt -8.465362 40.71065
1366 | vt -8.465362 48.97973
1367 | vt 25.26009 81.4213
1368 | vt 24.5258 86.99876
1369 | vt 22.85773 91.02586
1370 | vt 20.2042 94.484
1371 | vt 16.74606 97.13753
1372 | vt 12.71896 98.8056
1373 | vt 8.397364 99.37455
1374 | vt 4.075762 98.8056
1375 | vt 0.04867006 97.13753
1376 | vt -3.409472 94.484
1377 | vt -6.062998 91.02586
1378 | vt -7.731073 86.99876
1379 | vt -8.465362 81.4213
1380 | vt -8.465362 8.269083
1381 | vt 24.41695 50.2396
1382 | vt -7.622226 50.2396
1383 | vt 24.41695 81.05909
1384 | vt -7.622226 81.05909
1385 | vt 23.71938 86.35769
1386 | vt -6.924652 86.35769
1387 | vt -5.33998 90.18343
1388 | vt 22.13471 90.18343
1389 | vt -2.81913 93.46866
1390 | vt 19.61386 93.46866
1391 | vt 16.32862 95.98951
1392 | vt 0.4661047 95.98951
1393 | vt 12.50288 97.57418
1394 | vt 4.291842 97.57418
1395 | vt 8.397364 98.11469
1396 | vt -65.05562 48.97973
1397 | vt -65.05562 81.4213
1398 | vt -59.09022 50.2396
1399 | vt -59.09022 81.05909
1400 | vt 67.42935 40.71065
1401 | vt 67.42935 8.269083
1402 | vt 61.46395 39.89961
1403 | vt 61.46395 9.080123
1404 | vt -30.40788 79.35002
1405 | vt -26.73018 81.68978
1406 | vt -27.12265 74.28588
1407 | vt -23.62884 76.50866
1408 | vt -65.05562 8.269083
1409 | vt -65.05562 40.71065
1410 | vt -59.09022 9.080123
1411 | vt -59.09022 39.89961
1412 | vt 68.00278 68.30128
1413 | vt 62.08659 67.2495
1414 | vt 67.40335 72.61877
1415 | vt 61.51713 71.35111
1416 | vt -8.465362 69.44588
1417 | vt 25.26009 69.44588
1418 | vt -7.622226 63.48493
1419 | vt 24.41695 63.48493
1420 | vt -8.465362 -62.78175
1421 | vt -7.622226 -56.82081
1422 | vt 25.26009 -62.78175
1423 | vt 24.41695 -56.82081
1424 | vt 62.80314 59.68863
1425 | vt 64.71661 55.77219
1426 | vt 57.50418 56.79739
1427 | vt 59.32199 53.07677
1428 | vt 67.55283 78.75774
1429 | vt 61.58763 78.39248
1430 | vt 67.44331 84.38227
1431 | vt 61.48358 83.73579
1432 | vt -64.20888 78.0966
1433 | vt -63.60946 82.41408
1434 | vt -58.29269 77.04482
1435 | vt -57.72324 81.14642
1436 | vt -56.73658 69.14254
1437 | vt -54.8231 73.05898
1438 | vt -51.34195 66.44713
1439 | vt -49.52414 70.16775
1440 | vt -62.41652 72.27185
1441 | vt -61.35054 76.49839
1442 | vt -56.6166 70.65461
1443 | vt -55.60392 74.66982
1444 | vt -64.55239 86.39075
1445 | vt -58.6127 85.48103
1446 | vt -64.85031 82.04205
1447 | vt -58.89572 81.34977
1448 | vt -8.465362 -52.86775
1449 | vt -7.622226 -46.82935
1450 | vt 25.26009 -52.86775
1451 | vt 24.41695 -46.82935
1452 | vt 67.42935 81.4213
1453 | vt 67.42935 48.97973
1454 | vt 61.46395 81.05909
1455 | vt 61.46395 50.2396
1456 | vt -64.93824 86.52606
1457 | vt -58.9785 85.87957
1458 | vt -65.04776 80.90153
1459 | vt -59.08255 80.53626
1460 | vt 41.02254 73.13459
1461 | vt 44.70024 70.79482
1462 | vt 37.9212 67.95346
1463 | vt 41.41502 65.73069
1464 | vt 66.52753 64.06268
1465 | vt 67.59351 59.83614
1466 | vt 60.78092 62.23412
1467 | vt 61.79359 58.2189
1468 | vt 67.84987 75.80541
1469 | vt 61.89528 75.11313
1470 | vt 67.55195 80.15411
1471 | vt 61.61226 79.24439
1472 | vt -7.622226 9.080123
1473 | vt -7.622226 39.89961
1474 | vt 24.41695 9.080123
1475 | vt 24.41695 39.89961
1476 | vt -98.24313 67.03849
1477 | vt -98.24313 -17.22135
1478 | vt -131.314 67.03849
1479 | vt -131.314 -17.22135
1480 | vt -98.24313 247.6378
1481 | vt -131.314 247.6378
1482 | vt -98.24313 258.2677
1483 | vt -131.314 258.2677
1484 | vt 131.314 247.6378
1485 | vt 98.24313 247.6378
1486 | vt 131.314 258.2677
1487 | vt 98.24313 258.2677
1488 | vt 131.314 -17.22135
1489 | vt 131.314 67.03849
1490 | vt -81.90664 258.2677
1491 | vt -81.90664 247.6378
1492 | vt -114.9775 258.2677
1493 | vt -114.9775 247.6378
1494 | vt 81.90664 247.6378
1495 | vt 81.90664 258.2677
1496 | vt 114.9775 247.6378
1497 | vt 114.9775 258.2677
1498 | vt 64.23463 95.6787
1499 | vt 47.6992 67.03849
1500 | vt -8.736529 137.8086
1501 | vt -25.27196 109.1684
1502 | vt -64.23463 95.6787
1503 | vt 8.736529 137.8086
1504 | vt 64.23463 -45.86156
1505 | vt -8.736529 -87.99149
1506 | vt 47.6992 -17.22135
1507 | vt -25.27196 -59.35127
1508 | vt -71.83459 162.5984
1509 | vt -71.83459 173.2283
1510 | vt -38.76373 162.5984
1511 | vt -38.76373 173.2283
1512 | vt 71.83459 173.2283
1513 | vt 71.83459 162.5984
1514 | vt 38.76373 173.2283
1515 | vt 38.76373 162.5984
1516 | vt -32.69804 162.5984
1517 | vt 51.5618 162.5984
1518 | vt -64.23463 -45.86156
1519 | vt 8.736529 -87.99149
1520 | vt 7.789475 162.5984
1521 | vt -76.47037 162.5984
1522 | vt -17.22135 162.5984
1523 | vt 67.03849 162.5984
1524 | vt 17.22135 162.5984
1525 | vt -67.03849 162.5984
1526 | vt 76.47037 162.5984
1527 | vt -7.789475 162.5984
1528 | vt 32.69804 162.5984
1529 | vt -51.5618 162.5984
1530 | vt -41.8074 137.8086
1531 | vt -114.7786 95.6787
1532 | vt 41.8074 137.8086
1533 | vt 114.7786 95.6787
1534 | vt 107.1786 162.5984
1535 | vt 107.1786 173.2283
1536 | vt 140.2495 162.5984
1537 | vt 140.2495 173.2283
1538 | vt -107.1786 173.2283
1539 | vt -107.1786 162.5984
1540 | vt -140.2495 173.2283
1541 | vt -140.2495 162.5984
1542 | vt 44.42099 -30.21778
1543 | vt 44.42099 -28.96371
1544 | vt 73.50185 -30.21778
1545 | vt 62.23761 18.72129
1546 | vt 43.95242 -30.21778
1547 | vt 42.85165 -30.11688
1548 | vt 42.6601 18.71657
1549 | vt 43.3274 -28.86551
1550 | vt 43.59859 18.71657
1551 | vt 61.41708 18.71657
1552 | vt 10.19714 -71.18001
1553 | vt 13.28953 -65.82383
1554 | vt 25.75563 -79.86515
1555 | vt 25.27196 -72.74188
1556 | vt 42.13358 -63.00682
1557 | vt 42.13358 -70.72256
1558 | vt 9.377678 -63.56532
1559 | vt 9.377678 -70.72256
1560 | vt 112.5492 37.37286
1561 | vt 112.5492 75.2981
1562 | vt 121.09 41.2292
1563 | vt 123.8934 74.12224
1564 | vt 97.36607 93.77196
1565 | vt 87.93059 89.51167
1566 | vt -55.43637 -111.3431
1567 | vt -22.42409 -111.3431
1568 | vt -74.76277 -150.081
1569 | vt 117.9572 4.346988
1570 | vt 127.3283 4.346988
1571 | vt 112.5146 -19.42071
1572 | vt 157.0659 -19.42071
1573 | vt 51.36312 -96.29808
1574 | vt 84.37541 -96.29808
1575 | vt 51.70026 -134.3653
1576 | vt -24.34959 -110.3624
1577 | vt -25.1765 -148.4221
1578 | vt -77.18348 -148.4221
1579 | vt -102.2268 5.272053
1580 | vt -86.5056 47.90291
1581 | vt -81.91953 15.64017
1582 | vt -79.63064 16.82791
1583 | vt -79.7754 47.90291
1584 | vt -9.155703 -97.21284
1585 | vt -2.598257 -90.29968
1586 | vt 21.07811 -97.21284
1587 | vt 1.253044 -58.72774
1588 | vt -6.33992 -67.80787
1589 | vt -62.00528 41.33103
1590 | vt -62.05801 41.44688
1591 | vt -62.00528 41.52544
1592 | vt 69.8572 0.676241
1593 | vt 66.22585 0.676241
1594 | vt 84.82835 74.70647
1595 | vt 66.07137 74.70647
1596 | vt -107.4326 -42.03043
1597 | vt -157.0659 -42.03043
1598 | vt -116.9756 -18.26273
1599 | vt -127.3283 -18.26273
1600 | vt 53.87889 -134.0656
1601 | vt 86.06081 -95.58048
1602 | vt 105.8859 -134.0656
1603 | vt -17.6406 -14.84198
1604 | vt 8.714583 65.75522
1605 | vt -9.308948 -14.84198
1606 | vt 1.139123 -26.04715
1607 | vt 8.244748 -26.04715
1608 | vt 95.60767 -5.88596
1609 | vt 90.97162 -3.652703
1610 | vt 85.72071 74.74191
1611 | vt 81.72746 0.6663314
1612 | vt 70.97554 0.6663314
1613 | vt 39.35091 -111.9076
1614 | vt 39.01377 -73.84039
1615 | vt 72.02605 -73.84039
1616 | vt -18.16236 -15.43291
1617 | vt -8.524097 65.22507
1618 | vt -15.87527 -15.45249
1619 | vt 10.23288 65.22507
1620 | vt 103.402 -12.37631
1621 | vt 77.53668 -12.37631
1622 | vt 86.5056 33.44133
1623 | vt 77.75012 33.44133
1624 | vt 0.8395587 -21.10304
1625 | vt -10.73364 -21.10304
1626 | vt 1.127474 8.820947
1627 | vt -26.94781 -40.01062
1628 | vt -28.89178 -40.01062
1629 | vt -7.535496 -67.44384
1630 | vt -7.928308 -64.89523
1631 | vt 0.173838 -58.4623
1632 | vt 0.07922841 -58.4623
1633 | vt -78.02141 14.61778
1634 | vt -59.26443 14.61778
1635 | vt -89.00232 -34.38564
1636 | vt 37.75638 -86.86325
1637 | vt 47.77906 -81.07664
1638 | vt 40.33887 -91.33625
1639 | vt 73.3477 -90.85883
1640 | vt 47.77906 -62.87603
1641 | vt 56.39356 -57.90244
1642 | vt 67.34457 -76.87014
1643 | vt 70.97554 -76.81763
1644 | vt 81.72746 -76.81763
1645 | vt 100.2438 19.31783
1646 | vt 78.34177 19.31783
1647 | vt 86.61856 92.08357
1648 | vt 71.21085 92.08357
1649 | vt 2.31777 8.07415
1650 | vt -27.42012 -40.92928
1651 | vt -16.43921 8.07415
1652 | vt -83.81744 -64.70649
1653 | vt -44.9641 -36.71786
1654 | vt -31.81046 -64.70649
1655 | vt -31.3686 -44.36929
1656 | vt -3.344496 -47.40215
1657 | vt -3.536053 1.431306
1658 | vt 15.22093 1.431306
1659 | vt -65.12434 60.21254
1660 | vt -64.85308 78.96756
1661 | vt -59.29581 56.84744
1662 | vt -59.29581 73.7338
1663 | vt -48.74639 88.57999
1664 | vt -41.16392 84.20225
1665 | vt -60.21254 15.59357
1666 | vt -60.6497 -29.84159
1667 | vt -90.2318 -33.238
1668 | vt -69.5523 -33.238
1669 | vt -21.83464 -98.6628
1670 | vt -19.92739 -103.4422
1671 | vt -61.83727 -127.4793
1672 | vt -9.830284 -127.4793
1673 | vt -17.6406 -103.4841
1674 | vt -9.308948 -103.4841
1675 | vt 27.94487 -47.96909
1676 | vt -1.604552 -47.96909
1677 | vt 16.68063 0.969986
1678 | vt -103.5149 -7.073629
1679 | vt -86.61856 83.16167
1680 | vt -80.05375 -7.073629
1681 | vt -71.21085 83.16167
1682 | vt 101.5533 -18.38363
1683 | vt 94.10397 5.384077
1684 | vt 129.0065 -18.38363
1685 | vt 99.26895 5.384077
1686 | vt -110.2581 -28.08287
1687 | vt -107.0677 -43.06752
1688 | vt -129.0065 -43.06752
1689 | vt -81.07664 7.416361
1690 | vt -70.72256 35.49341
1691 | vt -62.87603 7.416361
1692 | vt -63.00682 35.49341
1693 | vt -63.20737 -6.014762
1694 | vt -78.89206 -6.014762
1695 | vt -63.0018 6.68549
1696 | vt 41.16578 -111.7058
1697 | vt 73.3477 -73.22073
1698 | vt 93.17277 -111.7058
1699 | vt -82.75686 -66.07813
1700 | vt -63.43046 -27.3402
1701 | vt -44.26768 -37.59077
1702 | vt -63.30317 -27.3402
1703 | vt 59.26184 -48.01237
1704 | vt 87.62929 -31.63442
1705 | vt 66.9657 -61.35583
1706 | vt 85.72071 -61.08457
1707 | vt 95.33314 -44.97788
1708 | vt -40.43219 -90.10864
1709 | vt -24.08057 -90.10864
1710 | vt -59.75859 -128.8466
1711 | vt -20.13091 -99.51656
1712 |
1713 |
1714 |
1715 |
1716 | f 2/2/1 1/1/1 3/3/2
1717 | f 3/3/2 4/4/2 2/2/1
1718 | f 6/6/4 5/5/3 7/7/3
1719 | f 7/7/3 8/8/4 6/6/4
1720 | f 3/10/2 9/9/5 10/11/5
1721 | f 10/11/5 4/12/2 3/10/2
1722 | f 12/14/6 11/13/6 13/15/6
1723 | f 13/15/6 14/16/6 12/14/6
1724 | f 16/18/7 15/17/7 1/19/1
1725 | f 1/19/1 2/20/1 16/18/7
1726 | f 5/22/3 17/21/8 18/23/8
1727 | f 18/23/8 7/24/3 5/22/3
1728 | f 11/26/9 12/25/9 19/27/9
1729 | f 19/27/9 20/28/9 11/26/9
1730 | f 20/28/9 15/29/9 11/26/9
1731 | f 20/28/9 21/30/9 15/29/9
1732 | f 21/30/9 1/31/9 15/29/9
1733 | f 21/30/9 22/32/9 1/31/9
1734 | f 22/32/9 3/33/9 1/31/9
1735 | f 22/32/9 9/34/9 3/33/9
1736 | f 22/32/9 23/35/9 9/34/9
1737 | f 23/35/9 24/36/9 9/34/9
1738 | f 23/35/9 6/37/9 24/36/9
1739 | f 23/35/9 25/38/9 6/37/9
1740 | f 23/35/9 26/39/9 25/38/9
1741 | f 23/35/9 27/40/9 26/39/9
1742 | f 27/40/9 28/41/9 26/39/9
1743 | f 28/41/9 29/42/9 26/39/9
1744 | f 28/41/9 30/43/9 29/42/9
1745 | f 5/44/9 6/37/9 25/38/9
1746 | f 17/45/9 5/44/9 25/38/9
1747 | f 17/45/9 25/38/9 31/46/9
1748 | f 32/47/9 17/45/9 31/46/9
1749 | f 33/48/9 32/47/9 31/46/9
1750 | f 33/48/9 31/46/9 34/49/9
1751 | f 35/50/9 33/48/9 34/49/9
1752 | f 35/50/9 34/49/9 36/51/9
1753 | f 37/52/9 35/50/9 36/51/9
1754 | f 37/52/9 36/51/9 38/53/9
1755 | f 38/53/9 39/54/9 37/52/9
1756 | f 38/56/6 36/55/6 40/57/6
1757 | f 40/57/6 41/58/6 38/56/6
1758 | f 42/60/10 33/59/10 35/61/11
1759 | f 35/61/11 43/62/11 42/60/10
1760 | f 44/64/13 29/63/12 30/65/14
1761 | f 30/65/14 45/66/14 44/64/13
1762 | f 34/68/16 31/67/15 46/69/17
1763 | f 46/69/17 47/70/18 34/68/16
1764 | f 48/72/20 28/71/19 27/73/21
1765 | f 27/73/21 49/74/22 48/72/20
1766 | f 24/76/23 6/75/4 8/77/4
1767 | f 8/77/4 50/78/23 24/76/23
1768 | f 51/80/24 32/79/24 33/81/10
1769 | f 33/81/10 42/82/10 51/80/24
1770 | f 43/84/11 35/83/11 37/85/25
1771 | f 37/85/25 52/86/25 43/84/11
1772 | f 37/88/26 39/87/26 53/89/26
1773 | f 53/89/26 52/90/26 37/88/26
1774 | f 9/92/5 24/91/23 50/93/23
1775 | f 50/93/23 10/94/5 9/92/5
1776 | f 17/96/8 32/95/24 51/97/24
1777 | f 51/97/24 18/98/8 17/96/8
1778 | f 20/100/26 19/99/26 54/101/26
1779 | f 54/101/26 55/102/26 20/100/26
1780 | f 54/101/26 56/103/26 55/102/26
1781 | f 56/103/26 57/104/26 55/102/26
1782 | f 57/104/26 58/105/26 55/102/26
1783 | f 13/107/27 11/106/27 15/108/7
1784 | f 15/108/7 16/109/7 13/107/27
1785 | f 23/111/29 22/110/28 59/112/30
1786 | f 59/112/30 60/113/31 23/111/29
1787 | f 31/115/15 25/114/32 61/116/33
1788 | f 61/116/33 46/117/17 31/115/15
1789 | f 36/119/34 34/118/16 47/120/18
1790 | f 47/120/18 40/121/34 36/119/34
1791 | f 63/123/36 62/122/35 64/124/35
1792 | f 62/122/35 63/123/36 65/125/36
1793 | f 67/127/38 66/126/37 68/128/37
1794 | f 66/126/37 67/127/38 69/129/38
1795 | f 71/131/39 70/130/39 72/132/39
1796 | f 70/130/39 71/131/39 73/133/39
1797 | f 71/135/40 74/134/40 75/136/40
1798 | f 74/134/40 71/135/40 72/137/40
1799 | f 77/139/42 76/138/41 78/140/42
1800 | f 76/138/41 77/139/42 79/141/41
1801 | f 79/143/41 80/142/43 76/144/41
1802 | f 80/142/43 79/143/41 81/145/43
1803 | f 64/147/35 80/146/43 81/148/43
1804 | f 80/146/43 64/147/35 62/149/35
1805 | f 75/151/44 77/150/42 78/152/42
1806 | f 77/150/42 75/151/44 74/153/44
1807 | f 82/155/45 65/154/36 63/156/36
1808 | f 65/154/36 82/155/45 83/157/45
1809 | f 68/159/37 83/158/45 82/160/45
1810 | f 83/158/45 68/159/37 66/161/37
1811 | f 85/163/47 84/162/46 86/164/47
1812 | f 84/162/46 85/163/47 87/165/46
1813 | f 88/167/48 73/166/48 71/168/48
1814 | f 73/166/48 88/167/48 84/169/48
1815 | f 88/167/48 71/168/48 89/170/48
1816 | f 84/169/48 88/167/48 90/171/48
1817 | f 84/169/48 90/171/48 91/172/48
1818 | f 84/169/48 91/172/48 86/173/48
1819 | f 86/173/48 91/172/48 92/174/48
1820 | f 86/173/48 92/174/48 93/175/48
1821 | f 93/175/48 92/174/48 94/176/48
1822 | f 93/175/48 94/176/48 95/177/48
1823 | f 93/175/48 95/177/48 96/178/48
1824 | f 93/175/48 96/178/48 97/179/48
1825 | f 97/179/48 96/178/48 98/180/48
1826 | f 97/179/48 98/180/48 80/181/48
1827 | f 97/179/48 80/181/48 62/182/48
1828 | f 97/179/48 62/182/48 69/183/48
1829 | f 69/183/48 62/182/48 66/184/48
1830 | f 66/184/48 62/182/48 65/185/48
1831 | f 66/184/48 65/185/48 83/186/48
1832 | f 99/187/48 80/181/48 98/180/48
1833 | f 99/187/48 76/188/48 80/181/48
1834 | f 100/189/48 76/188/48 99/187/48
1835 | f 101/190/48 76/188/48 100/189/48
1836 | f 102/191/48 76/188/48 101/190/48
1837 | f 102/191/48 78/192/48 76/188/48
1838 | f 103/193/48 78/192/48 102/191/48
1839 | f 103/193/48 75/194/48 78/192/48
1840 | f 104/195/48 75/194/48 103/193/48
1841 | f 89/170/48 75/194/48 104/195/48
1842 | f 75/194/48 89/170/48 71/168/48
1843 | f 105/197/49 86/196/47 93/198/49
1844 | f 86/196/47 105/197/49 85/199/47
1845 | f 106/201/50 69/200/38 67/202/38
1846 | f 69/200/38 106/201/50 97/203/50
1847 | f 87/205/51 73/204/51 84/206/51
1848 | f 73/204/51 87/205/51 70/207/51
1849 | f 106/209/50 93/208/49 97/210/50
1850 | f 93/208/49 106/209/50 105/211/49
1851 | f 61/213/33 25/212/32 26/214/52
1852 | f 26/214/52 107/215/53 61/213/33
1853 | f 45/217/14 30/216/14 28/218/19
1854 | f 28/218/19 48/219/20 45/217/14
1855 | f 49/221/22 27/220/21 23/222/29
1856 | f 23/222/29 60/223/31 49/221/22
1857 | f 58/225/54 108/224/54 109/226/54
1858 | f 109/226/54 55/227/54 58/225/54
1859 | f 109/226/54 110/228/54 55/227/54
1860 | f 109/226/54 59/229/54 110/228/54
1861 | f 109/226/54 60/230/54 59/229/54
1862 | f 109/226/54 49/231/54 60/230/54
1863 | f 109/226/54 48/232/54 49/231/54
1864 | f 109/226/54 45/233/54 48/232/54
1865 | f 109/226/54 111/234/54 45/233/54
1866 | f 44/235/54 45/233/54 111/234/54
1867 | f 107/236/54 44/235/54 111/234/54
1868 | f 61/237/54 107/236/54 111/234/54
1869 | f 46/238/54 61/237/54 111/234/54
1870 | f 47/239/54 46/238/54 111/234/54
1871 | f 40/240/54 47/239/54 111/234/54
1872 | f 40/240/54 111/234/54 112/241/54
1873 | f 112/241/54 41/242/54 40/240/54
1874 | f 21/244/56 20/243/55 55/245/55
1875 | f 55/245/55 110/246/57 21/244/56
1876 | f 107/248/53 26/247/52 29/249/12
1877 | f 29/249/12 44/250/13 107/248/53
1878 | f 22/252/28 21/251/56 110/253/57
1879 | f 110/253/57 59/254/30 22/252/28
1880 | f 114/256/59 113/255/58 115/257/59
1881 | f 113/255/58 114/256/59 116/258/58
1882 | f 118/260/61 117/259/60 119/261/60
1883 | f 117/259/60 118/260/61 120/262/61
1884 | f 122/264/51 121/263/51 123/265/51
1885 | f 121/263/51 122/264/51 124/266/51
1886 | f 126/268/4 125/267/62 127/269/62
1887 | f 125/267/62 126/268/4 128/270/4
1888 | f 116/272/58 129/271/63 113/273/58
1889 | f 129/271/63 116/272/58 130/274/63
1890 | f 114/276/59 120/275/61 118/277/61
1891 | f 120/275/61 114/276/59 115/278/59
1892 | f 127/280/62 131/279/64 132/281/64
1893 | f 131/279/64 127/280/62 125/282/62
1894 | f 119/284/60 128/283/4 126/285/4
1895 | f 128/283/4 119/284/60 117/286/60
1896 | f 130/288/63 122/287/65 129/289/63
1897 | f 122/287/65 130/288/63 124/290/65
1898 | f 134/292/66 133/291/66 121/293/66
1899 | f 133/291/66 134/292/66 135/294/66
1900 | f 135/294/66 134/292/66 136/295/66
1901 | f 135/294/66 136/295/66 137/296/66
1902 | f 135/294/66 137/296/66 138/297/66
1903 | f 138/297/66 137/296/66 139/298/66
1904 | f 138/297/66 139/298/66 140/299/66
1905 | f 140/299/66 139/298/66 141/300/66
1906 | f 140/299/66 141/300/66 142/301/66
1907 | f 140/299/66 142/301/66 143/302/66
1908 | f 140/299/66 143/302/66 144/303/66
1909 | f 144/303/66 143/302/66 145/304/66
1910 | f 121/293/66 146/305/66 134/292/66
1911 | f 146/305/66 121/293/66 124/306/66
1912 | f 146/305/66 124/306/66 147/307/66
1913 | f 147/307/66 124/306/66 148/308/66
1914 | f 148/308/66 124/306/66 130/309/66
1915 | f 148/308/66 130/309/66 149/310/66
1916 | f 149/310/66 130/309/66 116/311/66
1917 | f 149/310/66 116/311/66 150/312/66
1918 | f 150/312/66 116/311/66 151/313/66
1919 | f 151/313/66 116/311/66 152/314/66
1920 | f 152/314/66 116/311/66 114/315/66
1921 | f 152/314/66 114/315/66 145/304/66
1922 | f 145/304/66 114/315/66 144/303/66
1923 | f 144/303/66 114/315/66 132/316/66
1924 | f 132/316/66 114/315/66 118/317/66
1925 | f 132/316/66 118/317/66 127/318/66
1926 | f 127/318/66 118/317/66 119/319/66
1927 | f 127/318/66 119/319/66 126/320/66
1928 | f 132/322/64 153/321/67 144/323/67
1929 | f 153/321/67 132/322/64 131/324/64
1930 | f 138/326/69 154/325/68 155/327/69
1931 | f 154/325/68 138/326/69 140/328/68
1932 | f 156/330/40 135/329/40 157/331/40
1933 | f 135/329/40 156/330/40 133/332/40
1934 | f 156/334/14 121/333/14 133/335/14
1935 | f 121/333/14 156/334/14 123/336/14
1936 | f 140/338/68 153/337/67 154/339/68
1937 | f 153/337/67 140/338/68 144/340/67
1938 | f 135/342/70 155/341/69 157/343/70
1939 | f 155/341/69 135/342/70 138/344/69
1940 | f 159/346/71 158/345/71 160/347/71
1941 | f 160/347/71 161/348/71 159/346/71
1942 | f 163/350/14 162/349/14 164/351/14
1943 | f 164/351/14 165/352/14 163/350/14
1944 | f 164/351/14 166/353/14 165/352/14
1945 | f 166/353/14 167/354/14 165/352/14
1946 | f 169/356/14 168/355/14 170/357/14
1947 | f 170/357/14 159/358/14 169/356/14
1948 | f 170/357/14 158/359/14 159/358/14
1949 | f 170/357/14 171/360/14 158/359/14
1950 | f 173/362/14 172/361/14 174/363/14
1951 | f 174/363/14 175/364/14 173/362/14
1952 | f 175/364/14 176/365/14 173/362/14
1953 | f 175/364/14 177/366/14 176/365/14
1954 | f 179/368/51 178/367/51 180/369/51
1955 | f 180/369/51 181/370/51 179/368/51
1956 | f 177/372/66 175/371/66 182/373/66
1957 | f 182/373/66 183/374/66 177/372/66
1958 | f 183/374/66 184/375/66 177/372/66
1959 | f 182/373/66 175/371/66 174/376/66
1960 | f 185/377/66 182/373/66 174/376/66
1961 | f 174/376/66 186/378/66 185/377/66
1962 | f 174/376/66 187/379/66 186/378/66
1963 | f 188/381/26 162/380/26 163/382/26
1964 | f 163/382/26 189/383/26 188/381/26
1965 | f 170/385/72 190/384/72 191/386/72
1966 | f 191/386/72 192/387/72 170/385/72
1967 | f 192/387/72 171/388/72 170/385/72
1968 | f 192/387/72 158/389/72 171/388/72
1969 | f 192/387/72 160/390/72 158/389/72
1970 | f 192/387/72 193/391/72 160/390/72
1971 | f 190/384/72 170/385/72 194/392/72
1972 | f 195/385/72 183/393/72 182/394/72
1973 | f 182/394/72 196/395/72 195/385/72
1974 | f 196/395/72 197/388/72 195/385/72
1975 | f 196/395/72 198/389/72 197/388/72
1976 | f 196/395/72 199/390/72 198/389/72
1977 | f 196/395/72 200/396/72 199/390/72
1978 | f 183/393/72 195/385/72 201/392/72
1979 | f 166/398/6 202/397/6 203/399/6
1980 | f 203/399/6 167/400/6 166/398/6
1981 | f 205/402/73 204/401/73 206/403/73
1982 | f 205/402/73 206/403/73 207/404/73
1983 | f 208/405/73 205/402/73 207/404/73
1984 | f 209/406/73 208/405/73 207/404/73
1985 | f 209/406/73 207/404/73 210/407/73
1986 | f 211/408/73 209/406/73 210/407/73
1987 | f 210/407/73 212/409/73 211/408/73
1988 | f 179/372/66 213/410/66 214/411/66
1989 | f 214/411/66 178/375/66 179/372/66
1990 | f 213/410/66 179/372/66 215/376/66
1991 | f 192/412/66 213/410/66 215/376/66
1992 | f 215/376/66 193/413/66 192/412/66
1993 | f 179/372/66 216/371/66 215/376/66
1994 | f 215/376/66 217/379/66 193/413/66
1995 | f 172/415/74 210/414/74 218/416/74
1996 | f 218/416/74 219/417/74 172/415/74
1997 | f 219/417/74 220/418/74 172/415/74
1998 | f 210/414/74 172/415/74 176/419/74
1999 | f 176/419/74 212/420/74 210/414/74
2000 | f 172/415/74 173/421/74 176/419/74
2001 | f 176/419/74 221/422/74 212/420/74
2002 | f 223/424/14 222/423/14 186/425/14
2003 | f 186/425/14 219/426/14 223/424/14
2004 | f 186/425/14 187/363/14 219/426/14
2005 | f 187/363/14 220/361/14 219/426/14
2006 | f 212/427/14 221/365/14 184/366/14
2007 | f 184/366/14 183/428/14 212/427/14
2008 | f 183/428/14 211/429/14 212/427/14
2009 | f 183/428/14 201/430/14 211/429/14
2010 | f 217/432/40 215/431/40 224/433/40
2011 | f 224/433/40 225/434/40 217/432/40
2012 | f 226/436/14 224/435/14 215/437/14
2013 | f 215/437/14 216/438/14 226/436/14
2014 | f 216/438/14 181/439/14 226/436/14
2015 | f 216/438/14 179/440/14 181/439/14
2016 | f 177/442/51 184/441/51 221/443/51
2017 | f 221/443/51 176/444/51 177/442/51
2018 | f 227/445/14 180/439/14 178/440/14
2019 | f 178/440/14 214/446/14 227/445/14
2020 | f 214/446/14 188/349/14 227/445/14
2021 | f 188/349/14 189/350/14 227/445/14
2022 | f 228/447/14 161/358/14 160/359/14
2023 | f 160/359/14 193/448/14 228/447/14
2024 | f 193/448/14 225/435/14 228/447/14
2025 | f 193/448/14 217/437/14 225/435/14
2026 | f 204/450/71 205/449/71 198/451/71
2027 | f 198/451/71 199/452/71 204/450/71
2028 | f 208/453/14 209/429/14 195/430/14
2029 | f 195/430/14 205/454/14 208/453/14
2030 | f 195/430/14 198/455/14 205/454/14
2031 | f 195/430/14 197/456/14 198/455/14
2032 | f 163/458/75 196/457/75 229/459/75
2033 | f 229/459/75 227/460/75 163/458/75
2034 | f 227/460/75 189/461/75 163/458/75
2035 | f 196/457/75 163/458/75 167/462/75
2036 | f 167/462/75 200/463/75 196/457/75
2037 | f 163/458/75 165/464/75 167/462/75
2038 | f 167/462/75 203/465/75 200/463/75
2039 | f 231/467/9 230/466/9 185/468/9
2040 | f 185/468/9 186/469/9 231/467/9
2041 | f 186/469/9 222/470/9 231/467/9
2042 | f 230/466/9 231/467/9 232/471/9
2043 | f 232/471/9 233/472/9 230/466/9
2044 | f 231/467/9 234/473/9 232/471/9
2045 | f 232/471/9 235/474/9 233/472/9
2046 | f 224/415/74 229/475/74 236/476/74
2047 | f 236/476/74 228/477/74 224/415/74
2048 | f 228/477/74 225/418/74 224/415/74
2049 | f 229/475/74 224/415/74 181/419/74
2050 | f 181/419/74 227/478/74 229/475/74
2051 | f 224/415/74 226/421/74 181/419/74
2052 | f 181/419/74 180/422/74 227/478/74
2053 | f 237/458/75 218/479/75 191/480/75
2054 | f 191/480/75 190/481/75 237/458/75
2055 | f 190/481/75 238/461/75 237/458/75
2056 | f 218/479/75 237/458/75 239/464/75
2057 | f 218/479/75 239/464/75 240/462/75
2058 | f 240/462/75 219/482/75 218/479/75
2059 | f 240/462/75 223/465/75 219/482/75
2060 | f 187/484/40 174/483/40 172/485/40
2061 | f 172/485/40 220/486/40 187/484/40
2062 | f 206/487/14 204/454/14 199/455/14
2063 | f 206/487/14 199/455/14 200/488/14
2064 | f 206/487/14 200/488/14 203/354/14
2065 | f 203/354/14 202/353/14 206/487/14
2066 | f 241/355/14 233/489/14 235/490/14
2067 | f 235/490/14 190/491/14 241/355/14
2068 | f 235/490/14 238/492/14 190/491/14
2069 | f 241/355/14 190/491/14 194/357/14
2070 | f 170/494/76 168/493/76 241/495/76
2071 | f 241/495/76 194/496/76 170/494/76
2072 | f 72/498/48 242/497/48 243/499/48
2073 | f 243/499/48 74/500/48 72/498/48
2074 | f 243/499/48 77/501/48 74/500/48
2075 | f 243/499/48 79/502/48 77/501/48
2076 | f 243/499/48 81/503/48 79/502/48
2077 | f 243/499/48 64/504/48 81/503/48
2078 | f 243/499/48 63/505/48 64/504/48
2079 | f 243/499/48 82/506/48 63/505/48
2080 | f 242/497/48 72/498/48 70/507/48
2081 | f 244/508/48 242/497/48 70/507/48
2082 | f 244/508/48 70/507/48 245/509/48
2083 | f 245/509/48 246/510/48 244/508/48
2084 | f 70/507/48 247/511/48 245/509/48
2085 | f 82/506/48 243/499/48 247/511/48
2086 | f 70/507/48 87/512/48 247/511/48
2087 | f 87/512/48 85/513/48 247/511/48
2088 | f 85/513/48 105/514/48 247/511/48
2089 | f 105/514/48 106/515/48 247/511/48
2090 | f 106/515/48 67/516/48 247/511/48
2091 | f 67/516/48 68/517/48 247/511/48
2092 | f 68/517/48 82/506/48 247/511/48
2093 | f 249/519/14 248/518/14 250/520/14
2094 | f 249/519/14 250/520/14 251/521/14
2095 | f 251/521/14 252/522/14 249/519/14
2096 | f 250/520/14 253/523/14 251/521/14
2097 | f 41/524/14 251/521/14 253/523/14
2098 | f 253/523/14 112/525/14 41/524/14
2099 | f 41/524/14 246/526/14 251/521/14
2100 | f 41/524/14 53/527/14 246/526/14
2101 | f 39/528/14 53/527/14 41/524/14
2102 | f 41/524/14 38/529/14 39/528/14
2103 | f 53/527/14 14/530/14 246/526/14
2104 | f 14/530/14 245/531/14 246/526/14
2105 | f 14/530/14 19/532/14 245/531/14
2106 | f 14/530/14 12/533/14 19/532/14
2107 | f 19/532/14 54/534/14 245/531/14
2108 | f 54/534/14 254/535/14 245/531/14
2109 | f 254/535/14 255/536/14 245/531/14
2110 | f 254/535/14 256/537/14 255/536/14
2111 | f 256/537/14 257/538/14 255/536/14
2112 | f 257/538/14 258/539/14 255/536/14
2113 | f 258/539/14 259/540/14 255/536/14
2114 | f 259/540/14 260/541/14 255/536/14
2115 | f 259/540/14 261/542/14 260/541/14
2116 | f 259/540/14 262/543/14 261/542/14
2117 | f 261/542/14 263/544/14 260/541/14
2118 | f 263/544/14 264/545/14 260/541/14
2119 | f 265/546/14 259/540/14 258/539/14
2120 | f 258/539/14 266/547/14 265/546/14
2121 | f 259/540/14 265/546/14 267/548/14
2122 | f 159/402/73 161/401/73 228/549/73
2123 | f 159/402/73 228/549/73 236/550/73
2124 | f 169/405/73 159/402/73 236/550/73
2125 | f 168/406/73 169/405/73 236/550/73
2126 | f 168/406/73 236/550/73 230/551/73
2127 | f 241/408/73 168/406/73 230/551/73
2128 | f 230/551/73 233/552/73 241/408/73
2129 | f 166/467/9 213/553/9 207/554/9
2130 | f 207/554/9 206/555/9 166/467/9
2131 | f 206/555/9 202/470/9 166/467/9
2132 | f 213/553/9 166/467/9 162/471/9
2133 | f 162/471/9 214/556/9 213/553/9
2134 | f 166/467/9 164/473/9 162/471/9
2135 | f 162/471/9 188/474/9 214/556/9
2136 | f 231/558/6 222/557/6 223/559/6
2137 | f 223/559/6 240/560/6 231/558/6
2138 | f 195/562/76 209/561/76 211/563/76
2139 | f 211/563/76 201/564/76 195/562/76
2140 | f 269/566/4 268/565/4 270/567/4
2141 | f 270/567/4 271/568/4 269/566/4
2142 | f 272/570/40 271/569/40 270/571/40
2143 | f 270/571/40 273/572/40 272/570/40
2144 | f 275/574/14 274/573/14 276/575/14
2145 | f 276/575/14 277/576/14 275/574/14
2146 | f 278/578/77 262/577/77 261/579/77
2147 | f 261/579/77 279/580/77 278/578/77
2148 | f 261/579/77 280/581/77 279/580/77
2149 | f 280/581/77 281/582/77 279/580/77
2150 | f 283/584/72 282/583/72 284/585/72
2151 | f 284/585/72 285/586/72 283/584/72
2152 | f 269/588/51 286/587/51 287/589/51
2153 | f 287/589/51 268/590/51 269/588/51
2154 | f 289/592/26 288/591/26 290/593/26
2155 | f 290/593/26 291/594/26 289/592/26
2156 | f 273/596/14 287/595/14 286/597/14
2157 | f 286/597/14 272/598/14 273/596/14
2158 | f 276/600/72 292/599/72 293/601/72
2159 | f 293/601/72 277/602/72 276/600/72
2160 | f 295/604/73 294/603/73 296/605/73
2161 | f 296/605/73 297/606/73 295/604/73
2162 | f 282/608/4 298/607/4 299/609/4
2163 | f 299/609/4 284/610/4 282/608/4
2164 | f 293/612/76 300/611/76 275/613/76
2165 | f 275/613/76 277/614/76 293/612/76
2166 | f 284/616/76 299/615/76 301/617/76
2167 | f 301/617/76 285/618/76 284/616/76
2168 | f 301/620/14 302/619/14 283/621/14
2169 | f 283/621/14 285/622/14 301/620/14
2170 | f 304/624/4 303/623/4 305/625/4
2171 | f 305/625/4 306/626/4 304/624/4
2172 | f 270/628/74 268/627/74 287/629/74
2173 | f 287/629/74 273/630/74 270/628/74
2174 | f 307/632/40 306/631/40 305/633/40
2175 | f 305/633/40 308/634/40 307/632/40
2176 | f 304/636/51 309/635/51 310/637/51
2177 | f 310/637/51 303/638/51 304/636/51
2178 | f 288/640/4 311/639/4 312/641/4
2179 | f 312/641/4 290/642/4 288/640/4
2180 | f 313/644/71 292/643/71 276/645/71
2181 | f 276/645/71 274/646/71 313/644/71
2182 | f 269/627/74 314/647/74 297/648/74
2183 | f 297/648/74 296/649/74 269/627/74
2184 | f 296/649/74 286/629/74 269/627/74
2185 | f 296/649/74 272/630/74 286/629/74
2186 | f 296/649/74 304/650/74 272/630/74
2187 | f 296/649/74 309/651/74 304/650/74
2188 | f 296/649/74 307/652/74 309/651/74
2189 | f 314/647/74 269/627/74 271/628/74
2190 | f 314/647/74 271/628/74 306/653/74
2191 | f 271/628/74 272/630/74 306/653/74
2192 | f 272/630/74 304/650/74 306/653/74
2193 | f 306/653/74 315/654/74 314/647/74
2194 | f 306/653/74 307/652/74 315/654/74
2195 | f 307/652/74 296/649/74 315/654/74
2196 | f 316/656/75 314/655/75 315/657/75
2197 | f 315/657/75 317/658/75 316/656/75
2198 | f 305/653/74 303/650/74 310/651/74
2199 | f 310/651/74 308/652/74 305/653/74
2200 | f 311/660/6 318/659/6 319/661/6
2201 | f 319/661/6 312/662/6 311/660/6
2202 | f 308/664/14 310/663/14 309/665/14
2203 | f 309/665/14 307/666/14 308/664/14
2204 | f 298/668/71 282/667/71 283/669/71
2205 | f 283/669/71 302/670/71 298/668/71
2206 | f 292/672/4 313/671/4 300/673/4
2207 | f 300/673/4 293/674/4 292/672/4
2208 | f 319/676/14 318/675/14 289/677/14
2209 | f 289/677/14 291/678/14 319/676/14
2210 | f 311/680/9 288/679/9 289/681/9
2211 | f 289/681/9 318/682/9 311/680/9
2212 | f 290/679/9 295/683/9 320/684/9
2213 | f 320/684/9 321/685/9 290/679/9
2214 | f 321/685/9 291/681/9 290/679/9
2215 | f 321/685/9 319/682/9 291/681/9
2216 | f 295/683/9 290/679/9 312/680/9
2217 | f 312/680/9 294/686/9 295/683/9
2218 | f 312/680/9 319/682/9 294/686/9
2219 | f 319/682/9 321/685/9 294/686/9
2220 | f 323/688/72 322/687/72 316/689/72
2221 | f 316/689/72 313/599/72 323/688/72
2222 | f 316/689/72 300/601/72 313/599/72
2223 | f 316/689/72 275/602/72 300/601/72
2224 | f 316/689/72 298/583/72 275/602/72
2225 | f 316/689/72 299/585/72 298/583/72
2226 | f 316/689/72 301/586/72 299/585/72
2227 | f 323/688/72 313/599/72 274/600/72
2228 | f 323/688/72 274/600/72 302/584/72
2229 | f 274/600/72 275/602/72 302/584/72
2230 | f 275/602/72 298/583/72 302/584/72
2231 | f 302/584/72 317/690/72 323/688/72
2232 | f 302/584/72 301/586/72 317/690/72
2233 | f 301/586/72 316/689/72 317/690/72
2234 | f 123/692/66 322/691/66 323/693/66
2235 | f 323/693/66 122/694/66 123/692/66
2236 | f 323/693/66 129/695/66 122/694/66
2237 | f 323/693/66 113/696/66 129/695/66
2238 | f 323/693/66 115/697/66 113/696/66
2239 | f 323/693/66 120/698/66 115/697/66
2240 | f 323/693/66 117/699/66 120/698/66
2241 | f 323/693/66 128/700/66 117/699/66
2242 | f 323/693/66 321/701/66 128/700/66
2243 | f 322/691/66 123/692/66 156/702/66
2244 | f 156/702/66 321/701/66 320/703/66
2245 | f 320/703/66 322/691/66 156/702/66
2246 | f 156/702/66 157/704/66 321/701/66
2247 | f 157/704/66 155/705/66 321/701/66
2248 | f 155/705/66 154/706/66 321/701/66
2249 | f 154/706/66 153/707/66 321/701/66
2250 | f 153/707/66 131/708/66 321/701/66
2251 | f 131/708/66 125/709/66 321/701/66
2252 | f 125/709/66 128/700/66 321/701/66
2253 | f 324/711/78 255/710/78 245/712/78
2254 | f 245/712/78 247/713/78 324/711/78
2255 | f 324/711/78 247/713/78 279/714/78
2256 | f 279/714/78 281/715/78 324/711/78
2257 | f 253/717/79 112/716/79 111/718/79
2258 | f 111/718/79 243/719/79 253/717/79
2259 | f 243/719/79 325/720/79 253/717/79
2260 | f 243/719/79 326/721/79 325/720/79
2261 | f 243/719/79 327/722/79 326/721/79
2262 | f 243/719/79 328/723/79 327/722/79
2263 | f 243/719/79 329/724/79 328/723/79
2264 | f 243/719/79 330/725/79 329/724/79
2265 | f 243/719/79 242/726/79 330/725/79
2266 | f 331/728/80 259/727/80 262/729/80
2267 | f 262/729/80 278/730/80 331/728/80
2268 | f 331/728/80 278/730/80 109/731/80
2269 | f 332/732/80 331/728/80 109/731/80
2270 | f 332/732/80 109/731/80 108/733/80
2271 | f 332/732/80 108/733/80 333/734/80
2272 | f 332/732/80 333/734/80 334/735/80
2273 | f 334/735/80 335/736/80 332/732/80
2274 | f 235/738/26 232/737/26 237/739/26
2275 | f 237/739/26 238/740/26 235/738/26
2276 | f 237/492/14 232/490/14 234/741/14
2277 | f 234/741/14 239/742/14 237/492/14
2278 | f 234/741/14 231/423/14 239/742/14
2279 | f 231/423/14 240/424/14 239/742/14
2280 |
2281 |
2282 |
2283 |
2284 | f 336/744/9 53/743/9 14/745/9
2285 | f 14/745/9 13/26/9 336/744/9
2286 | f 13/26/9 337/746/9 336/744/9
2287 | f 13/26/9 338/747/9 337/746/9
2288 | f 338/747/9 339/748/9 337/746/9
2289 | f 338/747/9 340/749/9 339/748/9
2290 | f 13/26/9 341/750/9 338/747/9
2291 | f 13/26/9 342/751/9 341/750/9
2292 | f 13/26/9 16/29/9 342/751/9
2293 | f 16/29/9 343/752/9 342/751/9
2294 | f 16/29/9 2/31/9 343/752/9
2295 | f 2/31/9 344/753/9 343/752/9
2296 | f 2/31/9 345/754/9 344/753/9
2297 | f 2/31/9 4/33/9 345/754/9
2298 | f 4/33/9 346/755/9 345/754/9
2299 | f 4/33/9 347/756/9 346/755/9
2300 | f 4/33/9 51/47/9 347/756/9
2301 | f 4/33/9 18/45/9 51/47/9
2302 | f 4/33/9 10/34/9 18/45/9
2303 | f 10/34/9 7/44/9 18/45/9
2304 | f 10/34/9 50/36/9 7/44/9
2305 | f 50/36/9 8/37/9 7/44/9
2306 | f 348/757/9 347/756/9 51/47/9
2307 | f 349/758/9 348/757/9 51/47/9
2308 | f 349/758/9 51/47/9 42/48/9
2309 | f 350/759/9 349/758/9 42/48/9
2310 | f 351/760/9 350/759/9 42/48/9
2311 | f 351/760/9 42/48/9 43/50/9
2312 | f 352/761/9 351/760/9 43/50/9
2313 | f 352/761/9 43/50/9 52/52/9
2314 | f 353/762/9 352/761/9 52/52/9
2315 | f 340/749/9 353/762/9 52/52/9
2316 | f 339/748/9 340/749/9 52/52/9
2317 | f 354/763/9 339/748/9 52/52/9
2318 | f 354/763/9 52/52/9 53/743/9
2319 | f 53/743/9 336/744/9 354/763/9
2320 |
2321 |
2322 |
2323 |
2324 | f 63/123/82 64/124/81 62/122/81
2325 | f 62/122/81 65/125/82 63/123/82
2326 | f 67/127/84 68/128/83 66/126/83
2327 | f 66/126/83 69/129/84 67/127/84
2328 | f 71/131/45 72/132/45 70/130/45
2329 | f 70/130/45 73/133/45 71/131/45
2330 | f 71/135/51 75/136/51 74/134/51
2331 | f 74/134/51 72/137/51 71/135/51
2332 | f 77/139/85 78/140/85 76/138/86
2333 | f 76/138/86 79/141/86 77/139/85
2334 | f 79/143/86 76/144/86 80/142/87
2335 | f 80/142/87 81/145/87 79/143/86
2336 | f 64/147/81 81/148/87 80/146/87
2337 | f 80/146/87 62/149/81 64/147/81
2338 | f 75/151/88 78/152/85 77/150/85
2339 | f 77/150/85 74/153/88 75/151/88
2340 | f 82/155/39 63/156/82 65/154/82
2341 | f 65/154/82 83/157/39 82/155/39
2342 | f 68/159/83 82/160/39 83/158/39
2343 | f 83/158/39 66/161/83 68/159/83
2344 | f 104/195/89 89/170/89 88/167/89
2345 | f 88/167/89 90/171/89 104/195/89
2346 | f 90/171/89 103/193/89 104/195/89
2347 | f 90/171/89 91/172/89 103/193/89
2348 | f 91/172/89 92/174/89 103/193/89
2349 | f 92/174/89 102/191/89 103/193/89
2350 | f 92/174/89 101/190/89 102/191/89
2351 | f 92/174/89 94/176/89 101/190/89
2352 | f 94/176/89 95/177/89 101/190/89
2353 | f 95/177/89 100/189/89 101/190/89
2354 | f 95/177/89 99/187/89 100/189/89
2355 | f 95/177/89 96/178/89 99/187/89
2356 | f 96/178/89 98/180/89 99/187/89
2357 | f 88/167/89 89/170/89 71/168/89
2358 | f 88/167/89 71/168/89 73/166/89
2359 | f 73/166/89 84/169/89 88/167/89
2360 | f 84/169/89 90/171/89 88/167/89
2361 | f 84/169/89 91/172/89 90/171/89
2362 | f 84/169/89 86/173/89 91/172/89
2363 | f 86/173/89 92/174/89 91/172/89
2364 | f 86/173/89 93/175/89 92/174/89
2365 | f 93/175/89 94/176/89 92/174/89
2366 | f 93/175/89 95/177/89 94/176/89
2367 | f 93/175/89 96/178/89 95/177/89
2368 | f 93/175/89 97/179/89 96/178/89
2369 | f 97/179/89 98/180/89 96/178/89
2370 | f 97/179/89 80/181/89 98/180/89
2371 | f 99/187/89 98/180/89 80/181/89
2372 | f 97/179/89 62/182/89 80/181/89
2373 | f 97/179/89 69/183/89 62/182/89
2374 | f 69/183/89 66/184/89 62/182/89
2375 | f 66/184/89 65/185/89 62/182/89
2376 | f 66/184/89 83/186/89 65/185/89
2377 | f 100/189/89 99/187/89 76/188/89
2378 | f 99/187/89 80/181/89 76/188/89
2379 | f 75/194/89 71/168/89 89/170/89
2380 | f 89/170/89 104/195/89 75/194/89
2381 | f 104/195/89 103/193/89 75/194/89
2382 | f 103/193/89 78/192/89 75/194/89
2383 | f 103/193/89 102/191/89 78/192/89
2384 | f 102/191/89 76/188/89 78/192/89
2385 | f 102/191/89 101/190/89 76/188/89
2386 | f 101/190/89 100/189/89 76/188/89
2387 | f 85/163/90 86/164/90 84/162/91
2388 | f 84/162/91 87/165/91 85/163/90
2389 | f 105/197/92 93/198/92 86/196/90
2390 | f 86/196/90 85/199/90 105/197/92
2391 | f 106/201/93 67/202/84 69/200/84
2392 | f 69/200/84 97/203/93 106/201/93
2393 | f 87/205/40 84/206/40 73/204/40
2394 | f 73/204/40 70/207/40 87/205/40
2395 | f 106/209/93 97/210/93 93/208/92
2396 | f 93/208/92 105/211/92 106/209/93
2397 | f 114/256/94 115/257/94 113/255/95
2398 | f 113/255/95 116/258/95 114/256/94
2399 | f 118/260/97 119/261/96 117/259/96
2400 | f 117/259/96 120/262/97 118/260/97
2401 | f 122/264/40 123/265/40 121/263/40
2402 | f 121/263/40 124/266/40 122/264/40
2403 | f 126/268/14 127/269/98 125/267/98
2404 | f 125/267/98 128/270/14 126/268/14
2405 | f 116/272/95 113/273/95 129/271/99
2406 | f 129/271/99 130/274/99 116/272/95
2407 | f 114/276/94 118/277/97 120/275/97
2408 | f 120/275/97 115/278/94 114/276/94
2409 | f 127/280/98 132/281/100 131/279/100
2410 | f 131/279/100 125/282/98 127/280/98
2411 | f 119/284/96 126/285/14 128/283/14
2412 | f 128/283/14 117/286/96 119/284/96
2413 | f 130/288/99 129/289/99 122/287/101
2414 | f 122/287/101 124/290/101 130/288/99
2415 | f 134/292/74 121/293/74 133/291/74
2416 | f 133/291/74 135/294/74 134/292/74
2417 | f 135/294/74 136/295/74 134/292/74
2418 | f 135/294/74 137/296/74 136/295/74
2419 | f 135/294/74 138/297/74 137/296/74
2420 | f 138/297/74 139/298/74 137/296/74
2421 | f 138/297/74 140/299/74 139/298/74
2422 | f 140/299/74 141/300/74 139/298/74
2423 | f 140/299/74 142/301/74 141/300/74
2424 | f 140/299/74 143/302/74 142/301/74
2425 | f 140/299/74 144/303/74 143/302/74
2426 | f 144/303/74 145/304/74 143/302/74
2427 | f 121/293/74 134/292/74 146/305/74
2428 | f 146/305/74 134/292/74 136/295/74
2429 | f 146/305/74 124/306/74 121/293/74
2430 | f 146/305/74 147/307/74 124/306/74
2431 | f 136/295/74 147/307/74 146/305/74
2432 | f 147/307/74 148/308/74 124/306/74
2433 | f 136/295/74 148/308/74 147/307/74
2434 | f 136/295/74 137/296/74 148/308/74
2435 | f 137/296/74 139/298/74 148/308/74
2436 | f 148/308/74 130/309/74 124/306/74
2437 | f 148/308/74 149/310/74 130/309/74
2438 | f 139/298/74 149/310/74 148/308/74
2439 | f 139/298/74 141/300/74 149/310/74
2440 | f 149/310/74 116/311/74 130/309/74
2441 | f 149/310/74 150/312/74 116/311/74
2442 | f 141/300/74 150/312/74 149/310/74
2443 | f 141/300/74 142/301/74 150/312/74
2444 | f 150/312/74 151/313/74 116/311/74
2445 | f 142/301/74 151/313/74 150/312/74
2446 | f 142/301/74 143/302/74 151/313/74
2447 | f 151/313/74 152/314/74 116/311/74
2448 | f 143/302/74 152/314/74 151/313/74
2449 | f 143/302/74 145/304/74 152/314/74
2450 | f 152/314/74 114/315/74 116/311/74
2451 | f 152/314/74 145/304/74 114/315/74
2452 | f 145/304/74 144/303/74 114/315/74
2453 | f 144/303/74 132/316/74 114/315/74
2454 | f 132/316/74 118/317/74 114/315/74
2455 | f 132/316/74 127/318/74 118/317/74
2456 | f 127/318/74 119/319/74 118/317/74
2457 | f 127/318/74 126/320/74 119/319/74
2458 | f 132/322/100 144/323/102 153/321/102
2459 | f 153/321/102 131/324/100 132/322/100
2460 | f 138/326/103 155/327/103 154/325/104
2461 | f 154/325/104 140/328/104 138/326/103
2462 | f 156/330/51 157/331/51 135/329/51
2463 | f 135/329/51 133/332/51 156/330/51
2464 | f 156/334/4 133/335/4 121/333/4
2465 | f 121/333/4 123/336/4 156/334/4
2466 | f 140/338/104 154/339/104 153/337/102
2467 | f 153/337/102 144/340/102 140/338/104
2468 | f 135/342/105 157/343/105 155/341/103
2469 | f 155/341/103 138/344/103 135/342/105
2470 |
2471 |
2472 |
2473 |
2474 | f 104/195/48 88/167/48 89/170/48
2475 | f 88/167/48 104/195/48 90/171/48
2476 | f 90/171/48 104/195/48 103/193/48
2477 | f 90/171/48 103/193/48 91/172/48
2478 | f 91/172/48 103/193/48 92/174/48
2479 | f 92/174/48 103/193/48 102/191/48
2480 | f 92/174/48 102/191/48 101/190/48
2481 | f 92/174/48 101/190/48 94/176/48
2482 | f 94/176/48 101/190/48 95/177/48
2483 | f 95/177/48 101/190/48 100/189/48
2484 | f 95/177/48 100/189/48 99/187/48
2485 | f 95/177/48 99/187/48 96/178/48
2486 | f 96/178/48 99/187/48 98/180/48
2487 | f 146/305/66 136/295/66 134/292/66
2488 | f 136/295/66 146/305/66 147/307/66
2489 | f 136/295/66 147/307/66 148/308/66
2490 | f 136/295/66 148/308/66 137/296/66
2491 | f 137/296/66 148/308/66 139/298/66
2492 | f 139/298/66 148/308/66 149/310/66
2493 | f 139/298/66 149/310/66 141/300/66
2494 | f 141/300/66 149/310/66 150/312/66
2495 | f 141/300/66 150/312/66 142/301/66
2496 | f 142/301/66 150/312/66 151/313/66
2497 | f 142/301/66 151/313/66 143/302/66
2498 | f 143/302/66 151/313/66 152/314/66
2499 | f 143/302/66 152/314/66 145/304/66
2500 |
2501 |
2502 |
2503 |
2504 | f 356/765/9 355/764/9 357/766/9
2505 | f 357/766/9 358/767/9 356/765/9
2506 | f 357/766/9 359/768/9 358/767/9
2507 | f 359/768/9 360/769/9 358/767/9
2508 | f 359/768/9 361/770/9 360/769/9
2509 | f 359/768/9 362/771/9 361/770/9
2510 | f 362/771/9 363/772/9 361/770/9
2511 | f 362/771/9 364/773/9 363/772/9
2512 | f 364/773/9 365/774/9 363/772/9
2513 | f 365/774/9 366/775/9 363/772/9
2514 | f 365/774/9 367/776/9 366/775/9
2515 | f 367/776/9 368/777/9 366/775/9
2516 | f 367/776/9 369/778/9 368/777/9
2517 | f 353/780/106 340/779/106 356/781/106
2518 | f 356/781/106 358/782/106 353/780/106
2519 | f 336/784/107 337/783/107 370/785/107
2520 | f 370/785/107 371/786/107 336/784/107
2521 | f 347/788/109 348/787/108 368/789/110
2522 | f 368/789/110 369/790/109 347/788/109
2523 | f 339/792/106 354/791/106 372/793/106
2524 | f 372/793/106 373/794/106 339/792/106
2525 | f 362/796/112 343/795/111 344/797/113
2526 | f 344/797/113 364/798/114 362/796/112
2527 | f 337/800/115 339/799/115 373/801/115
2528 | f 373/801/115 370/802/115 337/800/115
2529 | f 372/804/116 354/803/116 336/805/116
2530 | f 336/805/116 371/806/116 372/804/116
2531 | f 345/808/118 346/807/117 367/809/119
2532 | f 367/809/119 365/810/120 345/808/118
2533 | f 357/812/121 341/811/121 342/813/122
2534 | f 342/813/122 359/814/123 357/812/121
2535 | f 350/816/125 351/815/124 361/817/126
2536 | f 361/817/126 363/818/127 350/816/125
2537 | f 348/820/108 349/819/128 366/821/129
2538 | f 366/821/129 368/822/110 348/820/108
2539 | f 349/824/128 350/823/125 363/825/127
2540 | f 363/825/127 366/826/129 349/824/128
2541 | f 361/828/126 351/827/124 352/829/130
2542 | f 352/829/130 360/830/131 361/828/126
2543 | f 356/832/132 340/831/132 338/833/132
2544 | f 338/833/132 355/834/132 356/832/132
2545 | f 338/836/107 341/835/107 357/837/107
2546 | f 357/837/107 355/838/107 338/836/107
2547 | f 360/840/131 352/839/130 353/841/133
2548 | f 353/841/133 358/842/133 360/840/131
2549 | f 346/844/117 347/843/109 369/845/109
2550 | f 369/845/109 367/846/119 346/844/117
2551 | f 344/848/113 345/847/118 365/849/120
2552 | f 365/849/120 364/850/114 344/848/113
2553 | f 359/852/123 342/851/122 343/853/111
2554 | f 343/853/111 362/854/112 359/852/123
2555 | f 373/856/9 372/855/9 371/857/9
2556 | f 371/857/9 370/858/9 373/856/9
2557 | f 323/860/4 317/859/4 374/861/4
2558 | f 374/861/4 375/862/4 323/860/4
2559 | f 374/864/76 317/863/76 196/865/76
2560 | f 196/865/76 376/866/76 374/864/76
2561 | f 377/394/72 375/688/72 374/690/72
2562 | f 374/690/72 376/395/72 377/394/72
2563 | f 323/868/71 375/867/71 377/869/71
2564 | f 377/869/71 182/870/71 323/868/71
2565 | f 196/488/14 182/428/14 377/871/14
2566 | f 377/871/14 376/872/14 196/488/14
2567 | f 296/874/51 236/873/51 378/875/51
2568 | f 378/875/51 379/876/51 296/874/51
2569 | f 229/878/40 315/877/40 380/879/40
2570 | f 380/879/40 381/880/40 229/878/40
2571 | f 296/882/4 379/881/4 380/883/4
2572 | f 380/883/4 315/884/4 296/882/4
2573 | f 381/886/14 378/885/14 236/447/14
2574 | f 236/447/14 229/445/14 381/886/14
2575 | f 380/654/74 379/649/74 378/476/74
2576 | f 378/476/74 381/475/74 380/654/74
2577 | f 383/888/4 382/887/4 111/889/4
2578 | f 111/889/4 109/890/4 383/888/4
2579 | f 384/892/26 383/891/26 109/893/26
2580 | f 109/893/26 320/894/26 384/892/26
2581 | f 382/896/6 385/895/6 295/897/6
2582 | f 295/897/6 111/898/6 382/896/6
2583 | f 385/683/9 382/899/9 383/900/9
2584 | f 383/900/9 384/684/9 385/683/9
2585 | f 295/489/14 385/901/14 384/902/14
2586 | f 384/902/14 320/425/14 295/489/14
2587 | f 294/686/9 321/685/9 185/468/9
2588 | f 185/468/9 230/466/9 294/686/9
2589 | f 247/904/74 243/903/74 297/648/74
2590 | f 297/648/74 314/647/74 247/904/74
2591 | f 322/687/72 278/905/72 279/906/72
2592 | f 279/906/72 316/689/72 322/687/72
2593 | f 111/907/73 295/604/73 297/606/73
2594 | f 297/606/73 243/908/73 111/907/73
2595 | f 109/910/66 278/909/66 322/691/66
2596 | f 322/691/66 320/703/66 109/910/66
2597 | f 294/603/73 230/551/73 236/550/73
2598 | f 236/550/73 296/605/73 294/603/73
2599 | f 317/658/75 315/657/75 229/459/75
2600 | f 229/459/75 196/457/75 317/658/75
2601 | f 185/377/66 321/701/66 323/693/66
2602 | f 323/693/66 182/373/66 185/377/66
2603 | f 387/912/75 386/911/75 388/655/75
2604 | f 388/655/75 389/656/75 387/912/75
2605 | f 279/859/4 247/884/4 386/913/4
2606 | f 386/913/4 387/914/4 279/859/4
2607 | f 388/915/14 314/445/14 316/488/14
2608 | f 316/488/14 389/916/14 388/915/14
2609 | f 316/918/26 279/917/26 387/919/26
2610 | f 387/919/26 389/920/26 316/918/26
2611 | f 247/922/6 314/921/6 388/923/6
2612 | f 388/923/6 386/924/6 247/922/6
2613 |
2614 |
2615 |
2616 |
2617 | f 56/926/135 54/925/134 254/927/134
2618 | f 254/927/134 390/928/136 56/926/135
2619 | f 391/929/137 54/925/134 56/926/135
2620 | f 392/931/138 391/930/137 56/932/139
2621 | f 56/932/139 57/933/138 392/931/138
2622 | f 57/933/138 56/932/139 390/934/136
2623 | f 58/936/14 57/935/14 390/937/14
2624 | f 390/937/14 108/938/14 58/936/14
2625 | f 390/937/14 333/939/14 108/938/14
2626 | f 390/937/14 393/940/14 333/939/14
2627 | f 57/935/14 58/936/14 394/941/14
2628 | f 394/941/14 392/942/14 57/935/14
2629 | f 281/944/14 280/943/14 395/945/14
2630 | f 281/944/14 395/945/14 396/946/14
2631 | f 281/944/14 396/946/14 397/947/14
2632 | f 397/947/14 324/948/14 281/944/14
2633 | f 397/950/141 396/949/140 264/951/142
2634 | f 395/953/143 280/952/143 261/954/143
2635 | f 261/954/143 263/955/143 395/953/143
2636 | f 396/957/145 395/956/144 263/958/146
2637 | f 249/519/4 250/520/4 248/518/4
2638 | f 249/519/4 251/521/4 250/520/4
2639 | f 251/521/4 249/519/4 252/522/4
2640 | f 250/520/4 251/521/4 253/523/4
2641 | f 41/524/4 253/523/4 251/521/4
2642 | f 253/523/4 41/524/4 112/525/4
2643 | f 41/524/4 251/521/4 246/526/4
2644 | f 41/524/4 246/526/4 53/527/4
2645 | f 39/528/4 41/524/4 53/527/4
2646 | f 41/524/4 39/528/4 38/529/4
2647 | f 53/527/4 246/526/4 14/530/4
2648 | f 14/530/4 246/526/4 245/531/4
2649 | f 14/530/4 245/531/4 19/532/4
2650 | f 14/530/4 19/532/4 12/533/4
2651 | f 19/532/4 245/531/4 54/534/4
2652 | f 54/534/4 245/531/4 254/535/4
2653 | f 254/535/4 245/531/4 255/536/4
2654 | f 254/535/4 255/536/4 256/537/4
2655 | f 256/537/4 255/536/4 257/538/4
2656 | f 257/538/4 255/536/4 258/539/4
2657 | f 258/539/4 255/536/4 259/540/4
2658 | f 259/540/4 255/536/4 260/541/4
2659 | f 259/540/4 260/541/4 261/542/4
2660 | f 259/540/4 261/542/4 262/543/4
2661 | f 261/542/4 260/541/4 263/544/4
2662 | f 263/544/4 260/541/4 264/545/4
2663 | f 265/546/4 258/539/4 259/540/4
2664 | f 258/539/4 265/546/4 266/547/4
2665 | f 259/540/4 267/548/4 265/546/4
2666 | f 260/960/147 397/959/141 264/961/142
2667 | f 399/963/148 398/962/148 400/964/148
2668 | f 400/964/148 329/965/148 399/963/148
2669 | f 329/965/148 330/966/148 399/963/148
2670 | f 398/968/149 249/967/149 248/969/149
2671 | f 248/969/149 401/970/150 398/968/149
2672 | f 401/970/150 400/971/151 398/968/149
2673 | f 401/973/14 327/972/14 328/974/14
2674 | f 403/976/153 402/975/152 404/977/154
2675 | f 404/977/154 405/978/153 403/976/153
2676 | f 260/980/155 255/979/155 324/981/155
2677 | f 324/981/155 397/982/155 260/980/155
2678 | f 396/984/145 263/983/146 264/985/156
2679 | f 407/987/158 406/986/157 408/988/159
2680 | f 408/988/159 265/989/159 407/987/158
2681 | f 265/989/159 267/990/159 407/987/158
2682 | f 410/992/160 409/991/160 404/993/154
2683 | f 404/993/154 411/994/160 410/992/160
2684 | f 404/993/154 402/995/152 411/994/160
2685 | f 412/997/162 257/996/161 413/998/163
2686 | f 404/1000/164 409/999/164 406/1001/157
2687 | f 406/1001/157 407/1002/158 404/1000/164
2688 | f 246/1004/165 251/1003/165 414/1005/165
2689 | f 414/1005/165 244/1006/165 246/1004/165
2690 | f 416/1008/166 415/1007/166 393/1009/167
2691 | f 256/1010/166 416/1008/166 393/1009/167
2692 | f 393/1009/167 254/1011/168 256/1010/166
2693 | f 329/1013/169 400/1012/151 401/1014/150
2694 | f 401/1014/150 328/1015/169 329/1013/169
2695 | f 399/1017/171 417/1016/170 252/1018/172
2696 | f 415/1020/14 416/1019/14 412/1021/14
2697 | f 412/1021/14 413/1022/14 415/1020/14
2698 | f 413/1022/14 334/1023/14 415/1020/14
2699 | f 413/1022/14 335/1024/14 334/1023/14
2700 | f 413/1022/14 403/1025/14 335/1024/14
2701 | f 413/1022/14 402/1026/14 403/1025/14
2702 | f 413/1022/14 411/1027/14 402/1026/14
2703 | f 335/1029/173 403/1028/173 405/1030/173
2704 | f 405/1030/173 332/1031/173 335/1029/173
2705 | f 254/1033/168 393/1032/167 390/1034/174
2706 | f 326/1036/176 248/1035/175 250/1037/177
2707 | f 250/1037/177 325/1038/177 326/1036/176
2708 | f 414/1040/179 251/1039/178 417/1041/180
2709 | f 417/1043/14 399/1042/14 330/1044/14
2710 | f 330/1044/14 242/1045/14 417/1043/14
2711 | f 242/1045/14 414/1046/14 417/1043/14
2712 | f 242/1045/14 244/1047/14 414/1046/14
2713 | f 398/1049/181 399/1048/171 252/1050/172
2714 | f 252/1050/172 249/1051/181 398/1049/181
2715 | f 409/1053/183 410/1052/182 258/1054/184
2716 | f 258/1054/184 266/1055/183 409/1053/183
2717 | f 266/1055/183 406/1056/183 409/1053/183
2718 | f 266/1055/183 408/1057/183 406/1056/183
2719 | f 251/1059/178 252/1058/185 417/1060/180
2720 | f 407/1062/186 267/1061/186 259/1063/186
2721 | f 259/1063/186 331/1064/186 407/1062/186
2722 | f 416/1066/187 256/1065/187 257/1067/187
2723 | f 257/1067/187 412/1068/187 416/1066/187
2724 | f 265/1070/188 408/1069/188 266/1071/188
2725 | f 393/1073/189 415/1072/189 334/1074/189
2726 | f 334/1074/189 333/1075/189 393/1073/189
2727 | f 250/1077/190 253/1076/190 325/1078/190
2728 | f 413/1080/163 257/1079/161 258/1081/191
2729 | f 401/1083/192 248/1082/175 326/1084/176
2730 | f 326/1084/176 327/1085/192 401/1083/192
2731 | f 331/1087/14 332/1086/14 405/1088/14
2732 | f 405/1088/14 404/1089/14 331/1087/14
2733 | f 404/1089/14 407/1090/14 331/1087/14
2734 | f 411/1092/193 413/1091/193 258/1093/184
2735 | f 258/1093/184 410/1094/182 411/1092/193
2736 |
2737 |
2738 |
2739 |
2740 | f 192/448/14 191/491/14 218/426/14
2741 | f 218/426/14 213/446/14 192/448/14
2742 | f 218/426/14 207/487/14 213/446/14
2743 | f 218/426/14 210/427/14 207/487/14
2744 |
--------------------------------------------------------------------------------