From 93e9e45224753a907d28df75c3488b5493e42d80 Mon Sep 17 00:00:00 2001 From: TheRedShip Date: Sun, 5 Jan 2025 23:16:18 +0100 Subject: [PATCH] + | Triangle intersection --- includes/RT.hpp | 1 + includes/RT/Object.hpp | 1 + includes/RT/Scene.hpp | 4 +- includes/RT/objects/Triangle.hpp | 71 ++++ scenes/colored_light.rt | 10 +- scenes/cornell.rt | 2 + scenes/fox.rt | 591 +++++++++++++++++++++++++++++++ scenes/roughness.rt | 3 +- scenes/test.rt | 5 +- shaders/compute.glsl | 13 +- shaders/intersect.glsl | 70 +++- shaders/random.glsl | 37 +- srcs/class/Camera.cpp | 2 +- srcs/class/Scene.cpp | 11 +- srcs/class/SceneParser.cpp | 6 + 15 files changed, 797 insertions(+), 30 deletions(-) create mode 100644 includes/RT/objects/Triangle.hpp create mode 100644 scenes/fox.rt diff --git a/includes/RT.hpp b/includes/RT.hpp index d58bdc4..ad9ef9d 100644 --- a/includes/RT.hpp +++ b/includes/RT.hpp @@ -39,6 +39,7 @@ struct Vertex { # include "objects/Sphere.hpp" # include "objects/Plane.hpp" # include "objects/Quad.hpp" +# include "objects/Triangle.hpp" # include "Camera.hpp" # include "Window.hpp" diff --git a/includes/RT/Object.hpp b/includes/RT/Object.hpp index ebad6b5..3530f1f 100644 --- a/includes/RT/Object.hpp +++ b/includes/RT/Object.hpp @@ -40,6 +40,7 @@ class Object SPHERE, PLANE, QUAD, + TRIANGLE, }; virtual Type getType() const = 0; diff --git a/includes/RT/Scene.hpp b/includes/RT/Scene.hpp index 155c9bc..b13c9bd 100644 --- a/includes/RT/Scene.hpp +++ b/includes/RT/Scene.hpp @@ -27,8 +27,8 @@ struct GPUObject float radius; // sphere alignas(16) glm::vec3 normal; // plane - alignas(16) glm::vec3 edge1; //quad - alignas(16) glm::vec3 edge2; //quad + alignas(16) glm::vec3 vertex1; //quad triangle + alignas(16) glm::vec3 vertex2; //quad triangle int type; }; diff --git a/includes/RT/objects/Triangle.hpp b/includes/RT/objects/Triangle.hpp new file mode 100644 index 0000000..346fbd7 --- /dev/null +++ b/includes/RT/objects/Triangle.hpp @@ -0,0 +1,71 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Triangle.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ycontre +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/23 19:12:51 by ycontre #+# #+# */ +/* Updated: 2024/12/23 19:47:09 by ycontre ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef RT_TRIANGLE__HPP +# define RT_TRIANGLE__HPP + +# include "RT.hpp" + +class Triangle : public Object +{ + public: + Triangle(std::stringstream &line) : Object(glm::vec3(0.0f), -1) + { + try { + float x, y, z; + float x2, y2, z2; + float x3, y3, z3; + + int mat_index; + + if (!(line >> x >> y >> z)) + throw std::runtime_error("Missing first vertex position"); + + if (!(line >> x2 >> y2 >> z2)) + throw std::runtime_error("Missing second vertex position"); + + if (!(line >> x3 >> y3 >> z3)) + throw std::runtime_error("Missing third vertex position"); + + if (!(line >> mat_index)) + throw std::runtime_error("Missing material properties"); + + _position = glm::vec3(x, y, z); + _vertex2 = glm::vec3(x2, y2, z2); + _vertex3 = glm::vec3(x3, y3, z3); + + _vertex2 -= _position; //optimization + _vertex3 -= _position; //optimization + + _normal = glm::normalize(glm::cross(_vertex2, _vertex3)); //optimization + + _mat_index = mat_index; + } + catch (const std::exception &e) { throw; } + } + Triangle(const glm::vec3& position, const glm::vec3& vertex2, const glm::vec3& vertex3, const int mat_index) + : Object(position, mat_index), _vertex2(vertex2), _vertex3(vertex3) {} + + const glm::vec3 &getVertex2() const { return (_vertex2); } + const glm::vec3 &getVertex3() const { return (_vertex3); } + const glm::vec3 &getNormal() const { return (_normal); } + + Type getType() const override { return Type::TRIANGLE; } + + private: + glm::vec3 _vertex2; + glm::vec3 _vertex3; + + glm::vec3 _normal; +}; + +#endif \ No newline at end of file diff --git a/scenes/colored_light.rt b/scenes/colored_light.rt index 9fb3efa..a8d53c4 100644 --- a/scenes/colored_light.rt +++ b/scenes/colored_light.rt @@ -1,11 +1,11 @@ -MAT 255 010 010 5 0.0 0.0 -MAT 010 255 010 5 0.0 0.0 -MAT 010 010 255 5 0.0 0.0 +MAT 255 010 010 5 0.0 1.0 +MAT 010 255 010 5 0.0 1.0 +MAT 010 010 255 5 0.0 1.0 -MAT 255 255 255 0 1.0 0.0 +MAT 255 255 255 0 1.0 1.0 -MAT 255 255 255 0 0.0 0.0 +MAT 255 255 255 0 0.0 1.0 sp -0.600 -0.500 -2 1 0 diff --git a/scenes/cornell.rt b/scenes/cornell.rt index cf4232a..5f7935b 100644 --- a/scenes/cornell.rt +++ b/scenes/cornell.rt @@ -8,6 +8,8 @@ MAT 100 255 100 0.0 1.0 1.0 MAT 255 255 255 0.0 1.0 1.0 +tr 0 0 0 1 0 0 0 0 1 5 + sp 0 -1 0 1 5 sp 0 -2 -1 2 2 diff --git a/scenes/fox.rt b/scenes/fox.rt new file mode 100644 index 0000000..3709ac0 --- /dev/null +++ b/scenes/fox.rt @@ -0,0 +1,591 @@ +CAM -60 100 150 + +MAT 255 255 255 5.0 0.0 0.0 //white light + +MAT 040 150 080 0.0 0.0 0.0 //green +MAT 040 080 150 0.0 0.0 0.0 //blue +MAT 255 255 255 0.0 1.0 0.15 //white + + +sp 40 100 100 50 0 + +qu -100 0 -100 200 0 0 0 0 200 1 +qu -100 0 -100 200 0 0 0 200 0 2 +qu -100 0 -100 0 0 200 0 200 0 3 + +tr 2.56373 35.214416 -24.954878 0.0 35.722735 -26.395561 -1.899627 42.954819 -41.190285 3 +tr 0.0 51.896892 52.404381 6.704248 53.417492 52.455325 4.904160 52.507389 57.364223 3 +tr 5.348627 57.736511 58.438560 3.9860 59.59044 61.444350 0.0 56.19730 66.624329 3 +tr 3.744807 52.667048 61.826649 5.348627 57.736511 58.438560 1.544795 55.42628 66.616386 3 +tr 6.704248 53.417492 52.455325 10.13863 58.609661 51.223545 5.348627 57.736511 58.438560 3 +tr 8.293067 52.386982 43.218887 9.988013 56.955790 42.201694 10.13863 58.609661 51.223545 3 +tr 5.56289 29.690054 22.504197 3.840238 29.632073 21.957641 4.500369 27.181681 20.904129 3 +tr 4.759357 69.991416 51.111190 9.525023 66.221076 48.920918 12.592717 78.907195 50.617198 3 +tr 0.0 50.609543 59.65018 4.904160 52.507389 57.364223 3.744807 52.667048 61.826649 3 +tr 0.0 50.609543 59.65018 3.744807 52.667048 61.826649 0.0 53.720505 66.624854 3 +tr 0.0 48.425144 43.116306 8.293067 52.386982 43.218887 0.0 51.896892 52.404381 3 +tr 7.41744 42.900967 -38.332737 3.520885 42.379272 -38.986359 -1.899627 42.954819 -41.190285 3 +tr 6.829890 34.808849 -17.463003 5.433793 34.245609 -10.40941 0.0 32.848553 -10.104445 3 +tr 0.0 32.848553 -10.104445 0.0 32.890743 -12.748912 6.829890 34.808849 -17.463003 3 +tr 2.56373 35.214416 -24.954878 0.940462 33.953442 -17.355101 0.0 33.955035 -17.354838 3 +tr 0.0 33.955035 -17.354838 0.0 35.722735 -26.395561 2.56373 35.214416 -24.954878 3 +tr 2.56373 35.214416 -24.954878 3.520885 42.379272 -38.986359 4.500137 27.594796 -35.821728 3 +tr 3.86478 29.366340 19.452117 1.704136 29.146 15.999356 3.621434 25.564862 16.400618 3 +tr 3.900368 15.183628 -70.47957 0.0 14.296407 -70.585594 2.936006 14.774079 -87.992249 3 +tr 6.403100 17.834827 -73.160544 3.900368 15.183628 -70.47957 2.936006 14.774079 -87.992249 3 +tr 0.0 38.177894 -69.952988 4.769795 23.995514 -79.917061 2.598336 18.470300 -88.558006 3 +tr 4.769795 23.995514 -79.917061 6.403100 17.834827 -73.160544 2.936006 14.774079 -87.992249 3 +tr 6.404525 34.347115 -10.36317 8.836920 36.580421 -11.934812 5.27300 32.852187 11.318334 3 +tr 3.520885 42.379272 -38.986359 2.56373 35.214416 -24.954878 -1.899627 42.954819 -41.190285 3 +tr 0.0 36.583880 28.2483 2.183787 35.781075 24.601305 6.766037 37.404408 27.425132 3 +tr 0.0 51.896892 52.404381 8.293067 52.386982 43.218887 6.704248 53.417492 52.455325 3 +tr 0.0 50.609543 59.65018 0.0 51.896892 52.404381 4.904160 52.507389 57.364223 3 +tr 1.544795 55.42628 66.616386 5.348627 57.736511 58.438560 0.0 56.19730 66.624329 3 +tr 3.744807 52.667048 61.826649 4.904160 52.507389 57.364223 5.348627 57.736511 58.438560 3 +tr 0.0 53.720505 66.624854 3.744807 52.667048 61.826649 1.544795 55.42628 66.616386 3 +tr 4.904160 52.507389 57.364223 6.704248 53.417492 52.455325 5.348627 57.736511 58.438560 3 +tr 7.16389 46.160693 36.28796 6.766037 37.404408 27.425132 8.642366 49.95309 35.725203 3 +tr 6.704248 53.417492 52.455325 8.293067 52.386982 43.218887 10.13863 58.609661 51.223545 3 +tr 6.829890 34.808849 -17.463003 0.0 32.890743 -12.748912 3.702704 34.358364 -17.293137 3 +tr 0.0 36.583880 28.2483 0.0 32.53508 15.642671 2.183787 35.781075 24.601305 3 +tr 4.212159 43.850329 -41.87935 7.41744 42.900967 -38.332737 -1.899627 42.954819 -41.190285 3 +tr 6.404525 34.347115 -10.36317 5.433793 34.245609 -10.40941 6.829890 34.808849 -17.463003 3 +tr 3.702704 34.358364 -17.293137 0.0 32.890743 -12.748912 0.940462 33.953442 -17.355101 3 +tr 3.840238 29.632073 21.957641 2.183787 35.781075 24.601305 3.86478 29.366340 19.452117 3 +tr 0.0 20.144981 -89.904999 0.0 38.177894 -69.952988 2.598336 18.470300 -88.558006 3 +tr 2.936006 14.774079 -87.992249 0.0 14.296407 -70.585594 0.0 13.995141 -86.311569 3 +tr 2.598336 18.470300 -88.558006 4.769795 23.995514 -79.917061 2.936006 14.774079 -87.992249 3 +tr 0.0 13.995141 -86.311569 0.0 20.144981 -89.904999 2.598336 18.470300 -88.558006 3 +tr 2.936006 14.774079 -87.992249 0.0 13.995141 -86.311569 2.598336 18.470300 -88.558006 3 +tr -3.943626 35.214416 -24.954878 -1.899627 42.954819 -41.190285 0.0 35.722735 -26.395561 3 +tr 6.766037 37.404408 27.425132 7.16389 46.160693 36.28796 0.0 43.622168 36.291420 3 +tr 0.0 43.622168 36.291420 0.0 36.583880 28.2483 6.766037 37.404408 27.425132 3 +tr 0.0 51.896892 52.404381 -5.95839 52.507389 57.364223 -7.295751 53.417492 52.455325 3 +tr -6.651372 57.736511 58.438560 0.0 56.19730 66.624329 -4.990139 59.59044 61.444350 3 +tr -4.255162 52.667048 61.826649 -2.455175 55.42628 66.616386 -6.651372 57.736511 58.438560 3 +tr -7.295751 53.417492 52.455325 -6.651372 57.736511 58.438560 -11.986136 58.609661 51.223545 3 +tr -9.706932 52.386982 43.218887 -11.986136 58.609661 51.223545 -10.11986 56.955790 42.201694 3 +tr -6.943710 29.690054 22.504197 -5.499630 27.181681 20.904129 -4.159761 29.632073 21.957641 3 +tr -5.240642 69.991416 51.111190 -13.407282 78.907195 50.617198 -10.474976 66.221076 48.920918 3 +tr 0.0 50.609543 59.65018 -4.255162 52.667048 61.826649 -5.95839 52.507389 57.364223 3 +tr 0.0 50.609543 59.65018 0.0 53.720505 66.624854 -4.255162 52.667048 61.826649 3 +tr 0.0 48.425144 43.116306 0.0 51.896892 52.404381 -9.706932 52.386982 43.218887 3 +tr -8.958255 42.900967 -38.332737 -1.899627 42.954819 -41.190285 -4.479142 42.379272 -38.986359 3 +tr 0.0 32.890743 -12.748912 0.0 32.848553 -10.104445 -6.566234 34.245609 -10.40941 3 +tr -6.566234 34.245609 -10.40941 -7.170109 34.808849 -17.463003 0.0 32.890743 -12.748912 3 +tr 0.0 35.722735 -26.395561 0.0 33.955035 -17.354838 -1.59537 33.953442 -17.355070 3 +tr -1.59537 33.953442 -17.355070 -3.943626 35.214416 -24.954878 0.0 35.722735 -26.395561 3 +tr -3.943626 35.214416 -24.954878 -5.499862 27.594796 -35.821728 -4.479142 42.379272 -38.986359 3 +tr -4.913522 29.366340 19.452117 -4.378565 25.564862 16.400618 -2.295863 29.146 15.999356 3 +tr -4.99631 15.183628 -70.47957 -3.63993 14.774079 -87.992249 0.0 14.296407 -70.585594 3 +tr -7.596928 17.834827 -73.160544 -3.63993 14.774079 -87.992249 -4.99631 15.183628 -70.47957 3 +tr 0.0 38.177894 -69.952988 -3.401692 18.470300 -88.558006 -5.230204 23.995514 -79.917061 3 +tr -5.230204 23.995514 -79.917061 -3.63993 14.774079 -87.992249 -7.596928 17.834827 -73.160544 3 +tr -7.595474 34.347115 -10.36317 -6.972699 32.852187 11.318334 -9.163079 36.580421 -11.934812 3 +tr -4.479142 42.379272 -38.986359 -1.899627 42.954819 -41.190285 -3.943626 35.214416 -24.954878 3 +tr 0.0 36.583880 28.2483 -7.233932 37.404408 27.425132 -3.816212 35.781075 24.601305 3 +tr 0.0 51.896892 52.404381 -7.295751 53.417492 52.455325 -9.706932 52.386982 43.218887 3 +tr 0.0 50.609543 59.65018 -5.95839 52.507389 57.364223 0.0 51.896892 52.404381 3 +tr -2.455175 55.42628 66.616386 0.0 56.19730 66.624329 -6.651372 57.736511 58.438560 3 +tr -4.255162 52.667048 61.826649 -6.651372 57.736511 58.438560 -5.95839 52.507389 57.364223 3 +tr 0.0 53.720505 66.624854 -2.455175 55.42628 66.616386 -4.255162 52.667048 61.826649 3 +tr -5.95839 52.507389 57.364223 -6.651372 57.736511 58.438560 -7.295751 53.417492 52.455325 3 +tr -8.983610 46.160693 36.28796 -9.357633 49.95309 35.725203 -7.233932 37.404408 27.425132 3 +tr -7.295751 53.417492 52.455325 -11.986136 58.609661 51.223545 -9.706932 52.386982 43.218887 3 +tr -7.170109 34.808849 -17.463003 -4.297295 34.358364 -17.293137 0.0 32.890743 -12.748912 3 +tr 0.0 36.583880 28.2483 -3.816212 35.781075 24.601305 0.0 32.53508 15.642671 3 +tr -5.587093 43.850329 -41.87935 -1.899627 42.954819 -41.190285 -8.958255 42.900967 -38.332737 3 +tr -7.595474 34.347115 -10.36317 -7.170109 34.808849 -17.463003 -6.566234 34.245609 -10.40941 3 +tr -4.297295 34.358364 -17.293137 -3.943626 35.214416 -24.954878 -1.59537 33.953442 -17.355070 3 +tr -4.159761 29.632073 21.957641 -4.913522 29.366340 19.452117 -3.816212 35.781075 24.601305 3 +tr 0.0 20.144981 -89.904999 -3.401692 18.470300 -88.558006 0.0 38.177894 -69.952988 3 +tr -3.63993 14.774079 -87.992249 0.0 13.995141 -86.311569 0.0 14.296407 -70.585594 3 +tr -3.401692 18.470300 -88.558006 -3.63993 14.774079 -87.992249 -5.230204 23.995514 -79.917061 3 +tr 0.0 13.995141 -86.311569 -3.401692 18.470300 -88.558006 0.0 20.144981 -89.904999 3 +tr -3.63993 14.774079 -87.992249 -3.401692 18.470300 -88.558006 0.0 13.995141 -86.311569 3 +tr -7.233932 37.404408 27.425132 0.0 36.583880 28.2483 0.0 43.622168 36.291420 3 +tr 0.0 43.622168 36.291420 -8.983610 46.160693 36.28796 -7.233932 37.404408 27.425132 3 +tr 3.840238 29.632073 21.957641 5.56289 29.690054 22.504197 6.766037 37.404408 27.425132 3 +tr 6.766037 37.404408 27.425132 2.183787 35.781075 24.601305 3.840238 29.632073 21.957641 3 +tr 3.86478 29.366340 19.452117 3.621434 25.564862 16.400618 4.500369 27.181681 20.904129 3 +tr 4.500369 27.181681 20.904129 3.840238 29.632073 21.957641 3.86478 29.366340 19.452117 3 +tr -4.159761 29.632073 21.957641 -3.816212 35.781075 24.601305 -7.233932 37.404408 27.425132 3 +tr -7.233932 37.404408 27.425132 -6.943710 29.690054 22.504197 -4.159761 29.632073 21.957641 3 +tr 1.704136 29.146 15.999356 3.86478 29.366340 19.452117 2.183787 35.781075 24.601305 3 +tr 2.183787 35.781075 24.601305 0.0 32.53508 15.642671 1.704136 29.146 15.999356 3 +tr -2.295863 29.146 15.999356 0.0 32.53508 15.642671 -3.816212 35.781075 24.601305 3 +tr -3.816212 35.781075 24.601305 -4.913522 29.366340 19.452117 -2.295863 29.146 15.999356 3 +tr -4.913522 29.366340 19.452117 -4.159761 29.632073 21.957641 -5.499630 27.181681 20.904129 3 +tr -5.499630 27.181681 20.904129 -4.378565 25.564862 16.400618 -4.913522 29.366340 19.452117 3 +tr -9.163079 36.580421 -11.934812 -10.6548 37.712260 -17.443083 -7.170109 34.808849 -17.463003 3 +tr -7.170109 34.808849 -17.463003 -7.595474 34.347115 -10.36317 -9.163079 36.580421 -11.934812 3 +tr 0.0 32.53508 15.642671 -6.566234 34.245609 -10.40941 0.0 32.848553 -10.104445 3 +tr -6.566234 34.245609 -10.40941 0.0 32.53508 15.642671 -6.972699 32.852187 11.318334 3 +tr -6.972699 32.852187 11.318334 -7.595474 34.347115 -10.36317 -6.566234 34.245609 -10.40941 3 +tr 8.836920 36.580421 -11.934812 6.404525 34.347115 -10.36317 6.829890 34.808849 -17.463003 3 +tr 6.829890 34.808849 -17.463003 9.993451 37.712260 -17.443083 8.836920 36.580421 -11.934812 3 +tr 0.0 32.53508 15.642671 0.0 32.848553 -10.104445 5.433793 34.245609 -10.40941 3 +tr 5.433793 34.245609 -10.40941 6.404525 34.347115 -10.36317 5.27300 32.852187 11.318334 3 +tr 5.27300 32.852187 11.318334 0.0 32.53508 15.642671 5.433793 34.245609 -10.40941 3 +tr 0.0 32.890743 -12.748912 0.0 33.955035 -17.354838 0.940462 33.953442 -17.355101 3 +tr 0.0 32.890743 -12.748912 -1.59537 33.953442 -17.355070 0.0 33.955035 -17.354838 3 +tr 0.0 32.890743 -12.748912 -4.297295 34.358364 -17.293137 -1.59537 33.953442 -17.355070 3 +tr 2.56373 35.214416 -24.954878 3.702704 34.358364 -17.293137 0.940462 33.953442 -17.355101 3 +tr -9.357633 49.95309 35.725203 -8.983610 46.160693 36.28796 -9.706932 52.386982 43.218887 3 +tr -9.706932 52.386982 43.218887 -10.11986 56.955790 42.201694 -9.357633 49.95309 35.725203 3 +tr -8.983610 46.160693 36.28796 0.0 43.622168 36.291420 0.0 48.425144 43.116306 3 +tr 0.0 48.425144 43.116306 -9.706932 52.386982 43.218887 -8.983610 46.160693 36.28796 3 +tr 8.642366 49.95309 35.725203 9.988013 56.955790 42.201694 8.293067 52.386982 43.218887 3 +tr 8.293067 52.386982 43.218887 7.16389 46.160693 36.28796 8.642366 49.95309 35.725203 3 +tr 7.16389 46.160693 36.28796 8.293067 52.386982 43.218887 0.0 48.425144 43.116306 3 +tr 0.0 48.425144 43.116306 0.0 43.622168 36.291420 7.16389 46.160693 36.28796 3 +tr 4.212159 43.850329 -41.87935 -1.899627 42.954819 -41.190285 0.0 32.943770 -44.257598 3 +tr 5.973053 34.281334 -45.56725 4.212159 43.850329 -41.87935 0.0 32.943770 -44.257598 3 +tr 5.27300 32.852187 11.318334 8.836920 36.580421 -11.934812 10.21248 37.256515 -11.904078 3 +tr 10.21248 37.256515 -11.904078 10.111938 35.768943 10.992324 5.27300 32.852187 11.318334 3 +tr 0.0 65.34003 -15.159720 0.0 64.885422 -12.648213 5.984772 60.879215 -12.830322 3 +tr 5.984772 60.879215 -12.830322 9.982604 58.756222 -25.962858 0.0 65.34003 -15.159720 3 +tr 9.327534 56.691535 -38.280253 10.698391 49.273220 -38.206862 7.32498 48.605991 -41.51181 3 +tr 9.982604 58.756222 -25.962858 11.532140 49.646450 -25.345735 10.698391 49.273220 -38.206862 3 +tr 10.698391 49.273220 -38.206862 7.41744 42.900967 -38.332737 4.212159 43.850329 -41.87935 3 +tr 5.27300 32.852187 11.318334 10.111938 35.768943 10.992324 9.328464 27.981525 13.414047 3 +tr 10.67626 60.659022 22.694967 0.0 66.905251 22.630355 0.0 71.519195 32.146743 3 +tr 11.207468 53.822937 21.917947 10.67626 60.659022 22.694967 7.787885 66.506470 32.700138 3 +tr 10.391251 64.281272 40.747531 7.787885 66.506470 32.700138 4.684775 72.120506 41.261550 3 +tr 9.988013 56.955790 42.201694 10.391251 64.281272 40.747531 9.525023 66.221076 48.920918 3 +tr 4.684775 72.120506 41.261550 0.0 73.626487 41.172459 0.0 71.232178 51.185360 3 +tr 7.787885 66.506470 32.700138 0.0 71.519195 32.146743 0.0 73.626487 41.172459 3 +tr 10.13863 58.609661 51.223545 9.525023 66.221076 48.920918 5.348627 57.736511 58.438560 3 +tr 10.391251 64.281272 40.747531 4.684775 72.120506 41.261550 12.592717 78.907195 50.617198 3 +tr 9.525023 66.221076 48.920918 4.759357 69.991416 51.111190 2.446671 62.239989 57.674968 3 +tr 3.9860 59.59044 61.444350 0.0 61.559505 58.601180 0.0 56.19730 66.624329 3 +tr 5.348627 57.736511 58.438560 2.446671 62.239989 57.674968 3.9860 59.59044 61.444350 3 +tr 8.642366 49.95309 35.725203 9.998713 51.307644 35.496367 9.988013 56.955790 42.201694 3 +tr 9.525023 66.221076 48.920918 10.391251 64.281272 40.747531 12.592717 78.907195 50.617198 3 +tr 4.684775 72.120506 41.261550 4.759357 69.991416 51.111190 12.592717 78.907195 50.617198 3 +tr 7.32498 48.605991 -41.51181 4.212159 43.850329 -41.87935 5.973053 34.281334 -45.56725 3 +tr 11.532140 49.646450 -25.345735 9.993451 37.712260 -17.443083 9.315205 32.477558 -19.879449 3 +tr 5.973053 34.281334 -45.56725 0.0 32.943770 -44.257598 6.508358 21.221992 -57.70144 3 +tr 4.759357 69.991416 51.111190 0.0 71.232178 51.185360 2.446671 62.239989 57.674968 3 +tr 10.13863 57.761101 8.92893 0.0 64.57281 8.92893 0.0 66.228600 16.33605 3 +tr 0.0 64.694884 -26.395557 9.982604 58.756222 -25.962858 9.327534 56.691535 -38.280253 3 +tr 0.0 61.317279 -38.332737 9.327534 56.691535 -38.280253 -1.899627 56.235497 -41.125937 3 +tr 10.698391 49.273220 -38.206862 11.532140 49.646450 -25.345735 11.597156 30.546070 -27.255341 3 +tr 9.993451 37.712260 -17.443083 6.829890 34.808849 -17.463003 7.71896 32.333770 -17.8618 3 +tr 7.41744 42.900967 -38.332737 10.698391 49.273220 -38.206862 9.109835 27.907665 -35.734993 3 +tr 3.520885 42.379272 -38.986359 7.41744 42.900967 -38.332737 6.974576 28.72905 -37.469357 3 +tr 8.156288 19.303761 -39.842998 8.753351 18.937048 -38.370131 8.628612 15.798697 -39.192928 3 +tr 4.783840 15.923059 -39.691772 4.976735 17.745190 -34.2270 4.649678 18.210795 -36.372394 3 +tr 7.71896 32.333770 -17.8618 3.702704 34.358364 -17.293137 4.976735 17.745190 -34.2270 3 +tr 6.286793 19.576533 -39.450867 7.1472 19.988350 -40.858893 7.13714 16.314198 -41.672500 3 +tr 4.432271 18.409652 -37.659142 4.715857 18.720396 -38.681575 4.783840 15.923059 -39.691772 3 +tr 9.315205 32.477558 -19.879449 7.71896 32.333770 -17.8618 7.778813 20.654619 -31.536822 3 +tr 11.597156 30.546070 -27.255341 9.315205 32.477558 -19.879449 7.778813 20.654619 -31.536822 3 +tr 4.649678 18.210795 -36.372394 4.432271 18.409652 -37.659142 4.783840 15.923059 -39.691772 3 +tr 9.328464 27.981525 13.414047 10.433645 28.916026 16.23141 9.38975 16.989401 15.505487 3 +tr 3.621434 25.564862 16.400618 4.493071 28.916026 13.392735 5.920657 17.709198 14.549993 3 +tr -7.233932 37.404408 27.425132 -11.986136 42.553417 26.717954 -10.557380 29.611983 21.768174 3 +tr -10.557380 29.611983 21.768174 -8.985674 29.857479 24.82954 -7.233932 37.404408 27.425132 3 +tr 0.0 32.53508 15.642671 5.27300 32.852187 11.318334 4.493071 28.916026 13.392735 3 +tr 4.493071 28.916026 13.392735 9.328464 27.981525 13.414047 5.920657 17.709198 14.549993 3 +tr 0.0 51.503872 -49.516410 5.543530 52.101985 -42.513435 6.340411 45.910331 -50.314636 3 +tr 5.973053 34.281334 -45.56725 8.622420 25.133496 -60.800404 7.595193 40.298758 -48.591999 3 +tr -8.766756 48.605991 -41.51181 -6.255722 52.101985 -42.513435 -7.529878 45.910331 -50.314636 3 +tr -7.529878 45.910331 -50.314636 -8.275125 40.298758 -48.591999 -8.766756 48.605991 -41.51181 3 +tr 7.795183 34.607143 -65.347328 8.622420 25.133496 -60.800404 6.403100 17.834827 -73.160544 3 +tr 6.508358 21.221992 -57.70144 0.0 20.149695 -57.495102 0.0 14.296407 -70.585594 3 +tr 8.622420 25.133496 -60.800404 6.508358 21.221992 -57.70144 3.900368 15.183628 -70.47957 3 +tr 5.704151 37.406714 -67.769561 7.795183 34.607143 -65.347328 4.769795 23.995514 -79.917061 3 +tr 0.0 38.177894 -69.952988 5.704151 37.406714 -67.769561 4.769795 23.995514 -79.917061 3 +tr 7.71896 32.333770 -17.8618 6.829890 34.808849 -17.463003 3.702704 34.358364 -17.293137 3 +tr 0.0 65.34003 -15.159720 9.982604 58.756222 -25.962858 0.0 64.694884 -26.395557 3 +tr 5.543530 52.101985 -42.513435 9.327534 56.691535 -38.280253 7.32498 48.605991 -41.51181 3 +tr -1.899627 56.235497 -41.125937 9.327534 56.691535 -38.280253 5.543530 52.101985 -42.513435 3 +tr 9.327534 56.691535 -38.280253 9.982604 58.756222 -25.962858 10.698391 49.273220 -38.206862 3 +tr 10.67626 60.659022 22.694967 0.0 66.228600 16.33605 0.0 66.905251 22.630355 3 +tr 7.32498 48.605991 -41.51181 10.698391 49.273220 -38.206862 4.212159 43.850329 -41.87935 3 +tr 7.787885 66.506470 32.700138 10.67626 60.659022 22.694967 0.0 71.519195 32.146743 3 +tr 10.693913 60.403056 33.765017 11.207468 53.822937 21.917947 7.787885 66.506470 32.700138 3 +tr 4.493071 28.916026 13.392735 5.27300 32.852187 11.318334 9.328464 27.981525 13.414047 3 +tr 10.13863 58.609661 51.223545 9.988013 56.955790 42.201694 9.525023 66.221076 48.920918 3 +tr 4.684775 72.120506 41.261550 7.787885 66.506470 32.700138 0.0 73.626487 41.172459 3 +tr 2.446671 62.239989 57.674968 0.0 71.232178 51.185360 0.0 61.559505 58.601180 3 +tr 5.348627 57.736511 58.438560 9.525023 66.221076 48.920918 2.446671 62.239989 57.674968 3 +tr 3.9860 59.59044 61.444350 2.446671 62.239989 57.674968 0.0 61.559505 58.601180 3 +tr 9.328464 27.981525 13.414047 10.111938 35.768943 10.992324 10.433645 28.916026 16.23141 3 +tr 7.14325 29.857479 24.82954 6.766037 37.404408 27.425132 5.56289 29.690054 22.504197 3 +tr 10.21248 37.256515 -11.904078 10.964531 44.99868 -11.593012 10.111938 35.768943 10.992324 3 +tr 0.0 51.503872 -49.516410 -1.899627 56.235497 -41.125937 5.543530 52.101985 -42.513435 3 +tr 11.597156 30.546070 -27.255341 11.532140 49.646450 -25.345735 9.315205 32.477558 -19.879449 3 +tr 8.622420 25.133496 -60.800404 5.973053 34.281334 -45.56725 6.508358 21.221992 -57.70144 3 +tr 4.759357 69.991416 51.111190 4.684775 72.120506 41.261550 0.0 71.232178 51.185360 3 +tr 10.40554 59.199275 15.339456 10.13863 57.761101 8.92893 0.0 66.228600 16.33605 3 +tr 0.0 61.317279 -38.332737 0.0 64.694884 -26.395557 9.327534 56.691535 -38.280253 3 +tr 9.109835 27.907665 -35.734993 10.698391 49.273220 -38.206862 11.597156 30.546070 -27.255341 3 +tr 5.984772 60.879215 -12.830322 9.995224 58.354156 -12.945090 9.982604 58.756222 -25.962858 3 +tr 9.315205 32.477558 -19.879449 9.993451 37.712260 -17.443083 7.71896 32.333770 -17.8618 3 +tr 6.974576 28.72905 -37.469357 7.41744 42.900967 -38.332737 9.109835 27.907665 -35.734993 3 +tr 4.500137 27.594796 -35.821728 3.520885 42.379272 -38.986359 6.974576 28.72905 -37.469357 3 +tr 4.976735 17.745190 -34.2270 3.702704 34.358364 -17.293137 4.649678 18.210795 -36.372394 3 +tr 1.704136 29.146 15.999356 0.0 32.53508 15.642671 4.493071 28.916026 13.392735 3 +tr 9.38975 16.989401 15.505487 10.433645 28.916026 16.23141 9.233382 24.872164 19.955320 3 +tr 5.704151 37.406714 -67.769561 0.0 51.503872 -49.516410 7.795183 34.607143 -65.347328 3 +tr 6.508358 21.221992 -57.70144 0.0 32.943770 -44.257598 0.0 20.149695 -57.495102 3 +tr 0.0 38.177894 -69.952988 0.0 51.503872 -49.516410 5.704151 37.406714 -67.769561 3 +tr 7.795183 34.607143 -65.347328 0.0 51.503872 -49.516410 6.340411 45.910331 -50.314636 3 +tr 4.769795 23.995514 -79.917061 7.795183 34.607143 -65.347328 6.403100 17.834827 -73.160544 3 +tr 3.900368 15.183628 -70.47957 6.508358 21.221992 -57.70144 0.0 14.296407 -70.585594 3 +tr 6.403100 17.834827 -73.160544 8.622420 25.133496 -60.800404 3.900368 15.183628 -70.47957 3 +tr -5.587093 43.850329 -41.87935 0.0 32.943770 -44.257598 -1.899627 42.954819 -41.190285 3 +tr -6.26975 34.281334 -45.56725 0.0 32.943770 -44.257598 -5.587093 43.850329 -41.87935 3 +tr -11.888061 35.768943 10.992324 -11.978751 37.256515 -11.904078 -9.163079 36.580421 -11.934812 3 +tr -9.163079 36.580421 -11.934812 -6.972699 32.852187 11.318334 -11.888061 35.768943 10.992324 3 +tr -10.17395 58.756222 -25.962858 -6.15227 60.879215 -12.830322 0.0 64.885422 -12.648213 3 +tr 0.0 64.885422 -12.648213 0.0 65.34003 -15.159720 -10.17395 58.756222 -25.962858 3 +tr -12.746067 53.225349 15.254115 -11.913240 37.510738 15.29643 -11.986136 42.553417 26.717954 3 +tr -11.986136 42.553417 26.717954 -12.792531 53.822937 21.917947 -12.746067 53.225349 15.254115 3 +tr -10.672466 56.691535 -38.280253 -8.766756 48.605991 -41.51181 -11.301638 49.273220 -38.206862 3 +tr -10.17395 58.756222 -25.962858 -11.301638 49.273220 -38.206862 -12.467859 49.646450 -25.345735 3 +tr -11.301638 49.273220 -38.206862 -5.587093 43.850329 -41.87935 -8.958255 42.900967 -38.332737 3 +tr -6.972699 32.852187 11.318334 -10.671535 27.981525 13.414047 -11.888061 35.768943 10.992324 3 +tr -11.932344 60.659022 22.694967 0.0 71.519195 32.146743 0.0 66.905251 22.630355 3 +tr -12.792531 53.822937 21.917947 -8.212114 66.506470 32.700138 -11.932344 60.659022 22.694967 3 +tr -11.608748 64.281272 40.747531 -5.315195 72.120506 41.261550 -8.212114 66.506470 32.700138 3 +tr 11.207468 53.822937 21.917947 10.693913 60.403056 33.765017 9.998713 51.307644 35.496367 3 +tr 9.998713 51.307644 35.496367 10.13863 42.553417 26.717954 11.207468 53.822937 21.917947 3 +tr -10.11986 56.955790 42.201694 -10.474976 66.221076 48.920918 -11.608748 64.281272 40.747531 3 +tr -5.315195 72.120506 41.261550 0.0 71.232178 51.185360 0.0 73.626487 41.172459 3 +tr -8.212114 66.506470 32.700138 0.0 73.626487 41.172459 0.0 71.519195 32.146743 3 +tr -11.986136 58.609661 51.223545 -6.651372 57.736511 58.438560 -10.474976 66.221076 48.920918 3 +tr -11.608748 64.281272 40.747531 -13.407282 78.907195 50.617198 -5.315195 72.120506 41.261550 3 +tr -10.474976 66.221076 48.920918 -3.553328 62.239989 57.674968 -5.240642 69.991416 51.111190 3 +tr -4.990139 59.59044 61.444350 0.0 56.19730 66.624329 0.0 61.559505 58.601180 3 +tr -6.651372 57.736511 58.438560 -4.990139 59.59044 61.444350 -3.553328 62.239989 57.674968 3 +tr -9.357633 49.95309 35.725203 -10.11986 56.955790 42.201694 -10.1286 51.307644 35.496367 3 +tr -10.474976 66.221076 48.920918 -13.407282 78.907195 50.617198 -11.608748 64.281272 40.747531 3 +tr -5.315195 72.120506 41.261550 -13.407282 78.907195 50.617198 -5.240642 69.991416 51.111190 3 +tr -8.766756 48.605991 -41.51181 -6.26975 34.281334 -45.56725 -5.587093 43.850329 -41.87935 3 +tr -12.467859 49.646450 -25.345735 -10.684794 32.477558 -19.879449 -10.6548 37.712260 -17.443083 3 +tr -6.26975 34.281334 -45.56725 -7.491641 21.221992 -57.70144 0.0 32.943770 -44.257598 3 +tr -5.240642 69.991416 51.111190 -3.553328 62.239989 57.674968 0.0 71.232178 51.185360 3 +tr -11.986136 57.761101 8.92893 0.0 66.228600 16.33605 0.0 64.57281 8.92893 3 +tr 0.0 64.694884 -26.395557 -10.672466 56.691535 -38.280253 -10.17395 58.756222 -25.962858 3 +tr 0.0 61.317279 -38.332737 -1.899627 56.235497 -41.125937 -10.672466 56.691535 -38.280253 3 +tr -11.301638 49.273220 -38.206862 -12.402844 30.546070 -27.255341 -12.467859 49.646450 -25.345735 3 +tr -10.6548 37.712260 -17.443083 -8.928103 32.333770 -17.8618 -7.170109 34.808849 -17.463003 3 +tr -8.958255 42.900967 -38.332737 -10.890164 27.907665 -35.734993 -11.301638 49.273220 -38.206862 3 +tr -4.479142 42.379272 -38.986359 -7.25452 28.72905 -37.469357 -8.958255 42.900967 -38.332737 3 +tr -9.843740 19.303761 -39.842998 -9.371387 15.798697 -39.192928 -9.246675 18.937077 -38.370131 3 +tr -8.928103 32.333770 -17.8618 -5.23292 17.745190 -34.2270 -4.297295 34.358364 -17.293137 3 +tr -7.713236 19.576533 -39.450867 -8.986315 16.314198 -41.672500 -8.998527 19.988350 -40.858893 3 +tr -5.567728 18.409652 -37.659142 -5.216159 15.923059 -39.691772 -5.284142 18.720396 -38.681575 3 +tr -10.684794 32.477558 -19.879449 -8.221186 20.654619 -31.536822 -8.928103 32.333770 -17.8618 3 +tr -12.402844 30.546070 -27.255341 -8.221186 20.654619 -31.536822 -10.684794 32.477558 -19.879449 3 +tr -5.350321 18.210795 -36.372394 -5.216159 15.923059 -39.691772 -5.567728 18.409652 -37.659142 3 +tr -10.671535 27.981525 13.414047 -10.961024 16.989401 15.505487 -11.566354 28.916026 16.23141 3 +tr -4.378565 25.564862 16.400618 -6.79342 17.709198 14.549993 -5.506928 28.916026 13.392735 3 +tr 0.0 32.53508 15.642671 -5.506928 28.916026 13.392735 -6.972699 32.852187 11.318334 3 +tr -5.506928 28.916026 13.392735 -6.79342 17.709198 14.549993 -10.671535 27.981525 13.414047 3 +tr 0.0 51.503872 -49.516410 -8.204816 34.607143 -65.347328 -7.529878 45.910331 -50.314636 3 +tr -8.275125 40.298758 -48.591999 -9.377580 25.133496 -60.800404 -6.26975 34.281334 -45.56725 3 +tr 7.595193 40.298758 -48.591999 8.622420 25.133496 -60.800404 7.795183 34.607143 -65.347328 3 +tr 7.795183 34.607143 -65.347328 6.340411 45.910331 -50.314636 7.595193 40.298758 -48.591999 3 +tr -8.204816 34.607143 -65.347328 -7.596928 17.834827 -73.160544 -9.377580 25.133496 -60.800404 3 +tr -7.491641 21.221992 -57.70144 0.0 14.296407 -70.585594 0.0 20.149695 -57.495102 3 +tr -9.377580 25.133496 -60.800404 -4.99631 15.183628 -70.47957 -7.491641 21.221992 -57.70144 3 +tr -6.295848 37.406714 -67.769561 -5.230204 23.995514 -79.917061 -8.204816 34.607143 -65.347328 3 +tr 0.0 38.177894 -69.952988 -5.230204 23.995514 -79.917061 -6.295848 37.406714 -67.769561 3 +tr -8.928103 32.333770 -17.8618 -4.297295 34.358364 -17.293137 -7.170109 34.808849 -17.463003 3 +tr 0.0 65.34003 -15.159720 0.0 64.694884 -26.395557 -10.17395 58.756222 -25.962858 3 +tr -6.255722 52.101985 -42.513435 -8.766756 48.605991 -41.51181 -10.672466 56.691535 -38.280253 3 +tr -1.899627 56.235497 -41.125937 -6.255722 52.101985 -42.513435 -10.672466 56.691535 -38.280253 3 +tr -10.672466 56.691535 -38.280253 -11.301638 49.273220 -38.206862 -10.17395 58.756222 -25.962858 3 +tr -11.932344 60.659022 22.694967 0.0 66.905251 22.630355 0.0 66.228600 16.33605 3 +tr -8.766756 48.605991 -41.51181 -5.587093 43.850329 -41.87935 -11.301638 49.273220 -38.206862 3 +tr -8.212114 66.506470 32.700138 0.0 71.519195 32.146743 -11.932344 60.659022 22.694967 3 +tr -8.212114 66.506470 32.700138 -12.792531 53.822937 21.917947 -11.306058 60.403056 33.765017 3 +tr -5.506928 28.916026 13.392735 -10.671535 27.981525 13.414047 -6.972699 32.852187 11.318334 3 +tr -11.986136 58.609661 51.223545 -10.474976 66.221076 48.920918 -10.11986 56.955790 42.201694 3 +tr -5.315195 72.120506 41.261550 0.0 73.626487 41.172459 -8.212114 66.506470 32.700138 3 +tr -3.553328 62.239989 57.674968 0.0 61.559505 58.601180 0.0 71.232178 51.185360 3 +tr -6.651372 57.736511 58.438560 -3.553328 62.239989 57.674968 -10.474976 66.221076 48.920918 3 +tr -4.990139 59.59044 61.444350 0.0 61.559505 58.601180 -3.553328 62.239989 57.674968 3 +tr -10.671535 27.981525 13.414047 -11.566354 28.916026 16.23141 -11.888061 35.768943 10.992324 3 +tr -8.985674 29.857479 24.82954 -6.943710 29.690054 22.504197 -7.233932 37.404408 27.425132 3 +tr -11.978751 37.256515 -11.904078 -11.888061 35.768943 10.992324 -11.35468 44.99868 -11.593012 3 +tr 0.0 51.503872 -49.516410 -6.255722 52.101985 -42.513435 -1.899627 56.235497 -41.125937 3 +tr -12.402844 30.546070 -27.255341 -10.684794 32.477558 -19.879449 -12.467859 49.646450 -25.345735 3 +tr -9.377580 25.133496 -60.800404 -7.491641 21.221992 -57.70144 -6.26975 34.281334 -45.56725 3 +tr -5.240642 69.991416 51.111190 0.0 71.232178 51.185360 -5.315195 72.120506 41.261550 3 +tr 0.0 66.228600 16.33605 -11.986136 57.761101 8.92893 -11.959445 59.199275 15.339456 3 +tr 0.0 61.317279 -38.332737 -10.672466 56.691535 -38.280253 0.0 64.694884 -26.395557 3 +tr -10.890164 27.907665 -35.734993 -12.402844 30.546070 -27.255341 -11.301638 49.273220 -38.206862 3 +tr -6.15227 60.879215 -12.830322 -10.17395 58.756222 -25.962858 -10.4775 58.354156 -12.945090 3 +tr -10.684794 32.477558 -19.879449 -8.928103 32.333770 -17.8618 -10.6548 37.712260 -17.443083 3 +tr -7.25452 28.72905 -37.469357 -10.890164 27.907665 -35.734993 -8.958255 42.900967 -38.332737 3 +tr -5.499862 27.594796 -35.821728 -7.25452 28.72905 -37.469357 -4.479142 42.379272 -38.986359 3 +tr -5.23292 17.745190 -34.2270 -5.216159 15.923059 -39.691772 -5.350321 18.210795 -36.372394 3 +tr -5.506928 28.916026 13.392735 0.0 32.53508 15.642671 -2.295863 29.146 15.999356 3 +tr -10.961024 16.989401 15.505487 -10.766617 24.872164 19.955320 -11.566354 28.916026 16.23141 3 +tr -6.295848 37.406714 -67.769561 -8.204816 34.607143 -65.347328 0.0 51.503872 -49.516410 3 +tr -7.491641 21.221992 -57.70144 0.0 20.149695 -57.495102 0.0 32.943770 -44.257598 3 +tr 0.0 38.177894 -69.952988 -6.295848 37.406714 -67.769561 0.0 51.503872 -49.516410 3 +tr -8.275125 40.298758 -48.591999 -7.529878 45.910331 -50.314636 -8.204816 34.607143 -65.347328 3 +tr -8.204816 34.607143 -65.347328 -9.377580 25.133496 -60.800404 -8.275125 40.298758 -48.591999 3 +tr -5.230204 23.995514 -79.917061 -7.596928 17.834827 -73.160544 -8.204816 34.607143 -65.347328 3 +tr -4.99631 15.183628 -70.47957 0.0 14.296407 -70.585594 -7.491641 21.221992 -57.70144 3 +tr -7.596928 17.834827 -73.160544 -4.99631 15.183628 -70.47957 -9.377580 25.133496 -60.800404 3 +tr 4.432271 18.409652 -37.659142 4.649678 18.210795 -36.372394 3.702704 34.358364 -17.293137 3 +tr 3.702704 34.358364 -17.293137 2.56373 35.214416 -24.954878 4.432271 18.409652 -37.659142 3 +tr -11.986136 57.761101 8.92893 -10.4775 58.354156 -12.945090 -12.565035 50.896403 -11.284069 3 +tr -12.565035 50.896403 -11.284069 -12.700067 52.633426 8.653613 -11.986136 57.761101 8.92893 3 +tr 10.111938 35.768943 10.992324 10.964531 44.99868 -11.593012 11.434965 50.896403 -11.284069 3 +tr 11.434965 50.896403 -11.284069 11.299932 52.633426 8.653613 10.111938 35.768943 10.992324 3 +tr -11.888061 35.768943 10.992324 -11.566354 28.916026 16.23141 -11.913240 37.510738 15.29643 3 +tr -12.700067 52.633426 8.653613 -12.565035 50.896403 -11.284069 -11.35468 44.99868 -11.593012 3 +tr -11.35468 44.99868 -11.593012 -11.888061 35.768943 10.992324 -12.700067 52.633426 8.653613 3 +tr 10.13863 57.761101 8.92893 11.299932 52.633426 8.653613 11.434965 50.896403 -11.284069 3 +tr 11.434965 50.896403 -11.284069 9.995224 58.354156 -12.945090 10.13863 57.761101 8.92893 3 +tr 6.766037 37.404408 27.425132 7.14325 29.857479 24.82954 9.442591 29.611983 21.768174 3 +tr 9.442591 29.611983 21.768174 10.13863 42.553417 26.717954 6.766037 37.404408 27.425132 3 +tr -11.566354 28.916026 16.23141 -10.766617 24.872164 19.955320 -10.557380 29.611983 21.768174 3 +tr -6.943710 29.690054 22.504197 -8.985674 29.857479 24.82954 -8.881085 26.678217 22.674994 3 +tr -8.881085 26.678217 22.674994 -5.499630 27.181681 20.904129 -6.943710 29.690054 22.504197 3 +tr 5.56289 29.690054 22.504197 4.500369 27.181681 20.904129 7.118914 26.678217 22.674994 3 +tr 7.118914 26.678217 22.674994 7.14325 29.857479 24.82954 5.56289 29.690054 22.504197 3 +tr 7.14325 29.857479 24.82954 7.118914 26.678217 22.674994 9.233382 24.872164 19.955320 3 +tr 9.233382 24.872164 19.955320 9.442591 29.611983 21.768174 7.14325 29.857479 24.82954 3 +tr -8.985674 29.857479 24.82954 -10.557380 29.611983 21.768174 -10.766617 24.872164 19.955320 3 +tr -10.766617 24.872164 19.955320 -8.881085 26.678217 22.674994 -8.985674 29.857479 24.82954 3 +tr 3.621434 25.564862 16.400618 1.704136 29.146 15.999356 4.493071 28.916026 13.392735 3 +tr -4.378565 25.564862 16.400618 -5.506928 28.916026 13.392735 -2.295863 29.146 15.999356 3 +tr 10.433645 28.916026 16.23141 9.442591 29.611983 21.768174 9.233382 24.872164 19.955320 3 +tr 9.442591 29.611983 21.768174 10.433645 28.916026 16.23141 10.86759 37.510738 15.29614 3 +tr 10.86759 37.510738 15.29614 10.13863 42.553417 26.717954 9.442591 29.611983 21.768174 3 +tr 11.253932 53.225349 15.254115 11.207468 53.822937 21.917947 10.13863 42.553417 26.717954 3 +tr 10.13863 42.553417 26.717954 10.86759 37.510738 15.29614 11.253932 53.225349 15.254115 3 +tr 10.86759 37.510738 15.29614 10.111938 35.768943 10.992324 11.299932 52.633426 8.653613 3 +tr 11.299932 52.633426 8.653613 11.253932 53.225349 15.254115 10.86759 37.510738 15.29614 3 +tr 10.40554 59.199275 15.339456 11.253932 53.225349 15.254115 11.299932 52.633426 8.653613 3 +tr 11.299932 52.633426 8.653613 10.13863 57.761101 8.92893 10.40554 59.199275 15.339456 3 +tr -11.959445 59.199275 15.339456 -12.746067 53.225349 15.254115 -12.792531 53.822937 21.917947 3 +tr -12.792531 53.822937 21.917947 -11.932344 60.659022 22.694967 -11.959445 59.199275 15.339456 3 +tr -11.986136 42.553417 26.717954 -11.913240 37.510738 15.29643 -11.566354 28.916026 16.23141 3 +tr -11.566354 28.916026 16.23141 -10.557380 29.611983 21.768174 -11.986136 42.553417 26.717954 3 +tr 10.111938 35.768943 10.992324 10.86759 37.510738 15.29614 10.433645 28.916026 16.23141 3 +tr -11.959445 59.199275 15.339456 -11.986136 57.761101 8.92893 -12.700067 52.633426 8.653613 3 +tr -12.700067 52.633426 8.653613 -12.746067 53.225349 15.254115 -11.959445 59.199275 15.339456 3 +tr -11.932344 60.659022 22.694967 0.0 66.228600 16.33605 -11.959445 59.199275 15.339456 3 +tr 10.67626 60.659022 22.694967 10.40554 59.199275 15.339456 0.0 66.228600 16.33605 3 +tr 10.40554 59.199275 15.339456 10.67626 60.659022 22.694967 11.207468 53.822937 21.917947 3 +tr 11.207468 53.822937 21.917947 11.253932 53.225349 15.254115 10.40554 59.199275 15.339456 3 +tr -12.746067 53.225349 15.254115 -12.700067 52.633426 8.653613 -11.888061 35.768943 10.992324 3 +tr -11.888061 35.768943 10.992324 -11.913240 37.510738 15.29643 -12.746067 53.225349 15.254115 3 +tr 7.1472 19.988350 -40.858893 6.286793 19.576533 -39.450867 4.500137 27.594796 -35.821728 3 +tr 4.500137 27.594796 -35.821728 6.974576 28.72905 -37.469357 7.1472 19.988350 -40.858893 3 +tr 4.715857 18.720396 -38.681575 4.432271 18.409652 -37.659142 2.56373 35.214416 -24.954878 3 +tr 2.56373 35.214416 -24.954878 4.500137 27.594796 -35.821728 4.715857 18.720396 -38.681575 3 +tr 8.753351 18.937048 -38.370131 8.156288 19.303761 -39.842998 6.974576 28.72905 -37.469357 3 +tr 6.974576 28.72905 -37.469357 9.109835 27.907665 -35.734993 8.753351 18.937048 -38.370131 3 +tr -9.246675 18.937077 -38.370131 -10.890164 27.907665 -35.734993 -7.25452 28.72905 -37.469357 3 +tr -7.25452 28.72905 -37.469357 -9.843740 19.303761 -39.842998 -9.246675 18.937077 -38.370131 3 +tr -8.998527 19.988350 -40.858893 -7.25452 28.72905 -37.469357 -5.499862 27.594796 -35.821728 3 +tr -5.499862 27.594796 -35.821728 -7.713236 19.576533 -39.450867 -8.998527 19.988350 -40.858893 3 +tr -10.890164 27.907665 -35.734993 -10.816832 17.618964 -37.755034 -12.402844 30.546070 -27.255341 3 +tr 9.109835 27.907665 -35.734993 11.597156 30.546070 -27.255341 9.183167 17.618964 -37.755034 3 +tr -5.567728 18.409652 -37.659142 -3.943626 35.214416 -24.954878 -4.297295 34.358364 -17.293137 3 +tr -4.297295 34.358364 -17.293137 -5.350321 18.210795 -36.372394 -5.567728 18.409652 -37.659142 3 +tr -5.284142 18.720396 -38.681575 -5.499862 27.594796 -35.821728 -3.943626 35.214416 -24.954878 3 +tr -3.943626 35.214416 -24.954878 -5.567728 18.409652 -37.659142 -5.284142 18.720396 -38.681575 3 +tr -4.297295 34.358364 -17.293137 -5.23292 17.745190 -34.2270 -5.350321 18.210795 -36.372394 3 +tr 7.32498 48.605991 -41.51181 7.595193 40.298758 -48.591999 6.340411 45.910331 -50.314636 3 +tr 6.340411 45.910331 -50.314636 5.543530 52.101985 -42.513435 7.32498 48.605991 -41.51181 3 +tr -6.255722 52.101985 -42.513435 0.0 51.503872 -49.516410 -7.529878 45.910331 -50.314636 3 +tr -8.766756 48.605991 -41.51181 -8.275125 40.298758 -48.591999 -6.26975 34.281334 -45.56725 3 +tr 7.32498 48.605991 -41.51181 5.973053 34.281334 -45.56725 7.595193 40.298758 -48.591999 3 +tr 0.0 64.57281 8.92893 0.0 64.885422 -12.648213 -6.15227 60.879215 -12.830322 3 +tr 0.0 64.57281 8.92893 5.984772 60.879215 -12.830322 0.0 64.885422 -12.648213 3 +tr 9.995224 58.354156 -12.945090 5.984772 60.879215 -12.830322 0.0 64.57281 8.92893 3 +tr 0.0 64.57281 8.92893 10.13863 57.761101 8.92893 9.995224 58.354156 -12.945090 3 +tr 9.995224 58.354156 -12.945090 11.434965 50.896403 -11.284069 11.532140 49.646450 -25.345735 3 +tr 11.532140 49.646450 -25.345735 9.982604 58.756222 -25.962858 9.995224 58.354156 -12.945090 3 +tr 10.964531 44.99868 -11.593012 10.21248 37.256515 -11.904078 9.993451 37.712260 -17.443083 3 +tr 9.993451 37.712260 -17.443083 11.532140 49.646450 -25.345735 10.964531 44.99868 -11.593012 3 +tr 11.532140 49.646450 -25.345735 11.434965 50.896403 -11.284069 10.964531 44.99868 -11.593012 3 +tr 9.993451 37.712260 -17.443083 10.21248 37.256515 -11.904078 8.836920 36.580421 -11.934812 3 +tr -12.467859 49.646450 -25.345735 -11.35468 44.99868 -11.593012 -12.565035 50.896403 -11.284069 3 +tr -10.4775 58.354156 -12.945090 -11.986136 57.761101 8.92893 0.0 64.57281 8.92893 3 +tr 0.0 64.57281 8.92893 -6.15227 60.879215 -12.830322 -10.4775 58.354156 -12.945090 3 +tr -10.4775 58.354156 -12.945090 -10.17395 58.756222 -25.962858 -12.467859 49.646450 -25.345735 3 +tr -12.467859 49.646450 -25.345735 -12.565035 50.896403 -11.284069 -10.4775 58.354156 -12.945090 3 +tr -10.6548 37.712260 -17.443083 -9.163079 36.580421 -11.934812 -11.978751 37.256515 -11.904078 3 +tr -11.35468 44.99868 -11.593012 -12.467859 49.646450 -25.345735 -10.6548 37.712260 -17.443083 3 +tr -10.6548 37.712260 -17.443083 -11.978751 37.256515 -11.904078 -11.35468 44.99868 -11.593012 3 +tr -12.792531 53.822937 21.917947 -11.986136 42.553417 26.717954 -10.1286 51.307644 35.496367 3 +tr -10.1286 51.307644 35.496367 -11.306058 60.403056 33.765017 -12.792531 53.822937 21.917947 3 +tr 10.693913 60.403056 33.765017 10.391251 64.281272 40.747531 9.988013 56.955790 42.201694 3 +tr 9.988013 56.955790 42.201694 9.998713 51.307644 35.496367 10.693913 60.403056 33.765017 3 +tr 9.998713 51.307644 35.496367 8.642366 49.95309 35.725203 6.766037 37.404408 27.425132 3 +tr 6.766037 37.404408 27.425132 10.13863 42.553417 26.717954 9.998713 51.307644 35.496367 3 +tr -10.1286 51.307644 35.496367 -11.986136 42.553417 26.717954 -7.233932 37.404408 27.425132 3 +tr -7.233932 37.404408 27.425132 -9.357633 49.95309 35.725203 -10.1286 51.307644 35.496367 3 +tr -11.306058 60.403056 33.765017 -10.1286 51.307644 35.496367 -10.11986 56.955790 42.201694 3 +tr -10.11986 56.955790 42.201694 -11.608748 64.281272 40.747531 -11.306058 60.403056 33.765017 3 +tr 10.391251 64.281272 40.747531 10.693913 60.403056 33.765017 7.787885 66.506470 32.700138 3 +tr -11.608748 64.281272 40.747531 -8.212114 66.506470 32.700138 -11.306058 60.403056 33.765017 3 +tr 9.183167 17.618964 -37.755034 7.778813 20.654619 -31.536822 7.649887 16.26572 -34.689819 3 +tr 4.976735 17.745190 -34.2270 4.783840 15.923059 -39.691772 4.537588 4.365971 -34.79413 3 +tr 9.183167 17.618964 -37.755034 7.649887 16.26572 -34.689819 9.331922 7.311106 -35.52418 3 +tr 6.932008 0.104527 -35.610756 9.331922 7.311106 -35.52418 9.366554 3.212086 -33.11299 3 +tr 4.783840 15.923059 -39.691772 7.13714 16.314198 -41.672500 6.932008 0.104527 -35.610756 3 +tr 7.649887 16.26572 -34.689819 4.976735 17.745190 -34.2270 5.151371 6.549992 -34.518214 3 +tr 8.628612 15.798697 -39.192928 9.183167 17.618964 -37.755034 9.331922 7.311106 -35.52418 3 +tr 7.13714 16.314198 -41.672500 8.628612 15.798697 -39.192928 9.331922 7.311106 -35.52418 3 +tr 5.585605 0.235170 -28.249870 4.537588 4.365971 -34.79413 4.476759 -1.878250 -32.43233 3 +tr 5.585605 0.235170 -28.249870 4.476759 -1.878250 -32.43233 9.313169 -1.897586 -32.74286 3 +tr 6.932008 0.104527 -35.610756 9.366554 3.212086 -33.11299 9.313169 -1.897586 -32.74286 3 +tr 9.366554 3.212086 -33.11299 9.331922 7.311106 -35.52418 7.941847 0.282303 -28.235185 3 +tr 9.331922 7.311106 -35.52418 6.951199 6.461365 -33.565356 7.941847 0.282303 -28.235185 3 +tr 6.951199 6.461365 -33.565356 5.151371 6.549992 -34.518214 5.585605 0.235170 -28.249870 3 +tr 5.920657 17.709198 14.549993 9.38975 16.989401 15.505487 8.2938 7.590977 15.186168 3 +tr 5.920657 17.709198 14.549993 5.668706 5.87811 16.250119 4.424944 17.528223 16.341564 3 +tr 8.267072 16.744806 20.320761 7.44476 16.776154 21.793997 6.961725 5.765913 20.814399 3 +tr 5.943046 16.979310 20.321110 4.574748 17.109808 19.374949 4.654186 6.348670 17.741123 3 +tr 4.574748 17.109808 19.374949 4.57993 17.441894 16.967269 4.654186 6.348670 17.741123 3 +tr 9.38975 16.989401 15.505487 9.233382 24.872164 19.955320 8.933396 16.867134 19.413126 3 +tr 5.185274 0.797058 23.492232 4.654186 6.348670 17.741123 4.907765 -1.940133 17.182732 3 +tr 4.907765 -1.940133 17.182732 8.701712 -1.955340 17.206516 8.421673 0.566217 23.332426 3 +tr 4.654186 6.348670 17.741123 5.668706 5.87811 16.250119 4.907765 -1.940133 17.182732 3 +tr 5.668706 5.87811 16.250119 8.838432 5.132270 16.926331 8.701712 -1.955340 17.206516 3 +tr 8.523355 5.926096 18.672105 6.961725 5.765913 20.814399 7.95157 0.225407 25.209337 3 +tr 6.961725 5.765913 20.814399 4.654186 6.348670 17.741123 5.185274 0.797058 23.492232 3 +tr 8.838432 5.132270 16.926331 8.523355 5.926096 18.672105 8.421673 0.566217 23.332426 3 +tr 7.1472 19.988350 -40.858893 6.974576 28.72905 -37.469357 8.156288 19.303761 -39.842998 3 +tr 7.778813 20.654619 -31.536822 7.71896 32.333770 -17.8618 4.976735 17.745190 -34.2270 3 +tr 4.715857 18.720396 -38.681575 4.500137 27.594796 -35.821728 6.286793 19.576533 -39.450867 3 +tr 7.649887 16.26572 -34.689819 7.778813 20.654619 -31.536822 4.976735 17.745190 -34.2270 3 +tr 9.183167 17.618964 -37.755034 11.597156 30.546070 -27.255341 7.778813 20.654619 -31.536822 3 +tr 5.151371 6.549992 -34.518214 4.976735 17.745190 -34.2270 4.537588 4.365971 -34.79413 3 +tr 9.331922 7.311106 -35.52418 7.649887 16.26572 -34.689819 6.951199 6.461365 -33.565356 3 +tr 4.537588 4.365971 -34.79413 4.783840 15.923059 -39.691772 6.932008 0.104527 -35.610756 3 +tr 6.951199 6.461365 -33.565356 7.649887 16.26572 -34.689819 5.151371 6.549992 -34.518214 3 +tr 6.932008 0.104527 -35.610756 7.13714 16.314198 -41.672500 9.331922 7.311106 -35.52418 3 +tr 4.476759 -1.878250 -32.43233 4.537588 4.365971 -34.79413 6.932008 0.104527 -35.610756 3 +tr 7.941847 0.282303 -28.235185 5.585605 0.235170 -28.249870 9.313169 -1.897586 -32.74286 3 +tr 6.932008 0.104527 -35.610756 9.313169 -1.897586 -32.74286 4.476759 -1.878250 -32.43233 3 +tr 9.313169 -1.897586 -32.74286 9.366554 3.212086 -33.11299 7.941847 0.282303 -28.235185 3 +tr 5.585605 0.235170 -28.249870 5.151371 6.549992 -34.518214 4.537588 4.365971 -34.79413 3 +tr 7.941847 0.282303 -28.235185 6.951199 6.461365 -33.565356 5.585605 0.235170 -28.249870 3 +tr 5.920657 17.709198 14.549993 9.328464 27.981525 13.414047 9.38975 16.989401 15.505487 3 +tr 8.2938 7.590977 15.186168 9.38975 16.989401 15.505487 8.838432 5.132270 16.926331 3 +tr 4.57993 17.441894 16.967269 3.621434 25.564862 16.400618 4.424944 17.528223 16.341564 3 +tr 8.933396 16.867134 19.413126 9.233382 24.872164 19.955320 8.267072 16.744806 20.320761 3 +tr 7.44476 16.776154 21.793997 7.118914 26.678217 22.674994 5.943046 16.979310 20.321110 3 +tr 5.668706 5.87811 16.250119 5.920657 17.709198 14.549993 8.2938 7.590977 15.186168 3 +tr 8.838432 5.132270 16.926331 9.38975 16.989401 15.505487 8.523355 5.926096 18.672105 3 +tr 8.701712 -1.955340 17.206516 8.838432 5.132270 16.926331 8.421673 0.566217 23.332426 3 +tr 5.668706 5.87811 16.250119 8.2938 7.590977 15.186168 8.838432 5.132270 16.926331 3 +tr 5.185274 0.797058 23.492232 4.907765 -1.940133 17.182732 7.95157 0.225407 25.209337 3 +tr 7.95157 0.225407 25.209337 4.907765 -1.940133 17.182732 8.421673 0.566217 23.332426 3 +tr 4.907765 -1.940133 17.182732 5.668706 5.87811 16.250119 8.701712 -1.955340 17.206516 3 +tr 8.421673 0.566217 23.332426 8.523355 5.926096 18.672105 7.95157 0.225407 25.209337 3 +tr 7.95157 0.225407 25.209337 6.961725 5.765913 20.814399 5.185274 0.797058 23.492232 3 +tr -10.816832 17.618964 -37.755034 -8.350112 16.26572 -34.689819 -8.221186 20.654619 -31.536822 3 +tr -5.23292 17.745190 -34.2270 -5.462411 4.365971 -34.79413 -5.216159 15.923059 -39.691772 3 +tr -10.816832 17.618964 -37.755034 -10.668105 7.311106 -35.52418 -8.350112 16.26572 -34.689819 3 +tr -7.67991 0.104527 -35.610756 -10.633473 3.212086 -33.11299 -10.668105 7.311106 -35.52418 3 +tr -5.216159 15.923059 -39.691772 -7.67991 0.104527 -35.610756 -8.986315 16.314198 -41.672500 3 +tr -8.350112 16.26572 -34.689819 -6.848628 6.549992 -34.518214 -5.23292 17.745190 -34.2270 3 +tr -9.371387 15.798697 -39.192928 -10.668105 7.311106 -35.52418 -10.816832 17.618964 -37.755034 3 +tr -8.986315 16.314198 -41.672500 -10.668105 7.311106 -35.52418 -9.371387 15.798697 -39.192928 3 +tr -6.414394 0.235170 -28.249870 -5.523240 -1.878250 -32.43233 -5.462411 4.365971 -34.79413 3 +tr -6.414394 0.235170 -28.249870 -10.686859 -1.897586 -32.74286 -5.523240 -1.878250 -32.43233 3 +tr -7.67991 0.104527 -35.610756 -10.686859 -1.897586 -32.74286 -10.633473 3.212086 -33.11299 3 +tr -10.633473 3.212086 -33.11299 -8.58152 0.282303 -28.235185 -10.668105 7.311106 -35.52418 3 +tr -10.668105 7.311106 -35.52418 -8.58152 0.282303 -28.235185 -7.48800 6.461365 -33.565356 3 +tr -7.48800 6.461365 -33.565356 -6.414394 0.235170 -28.249870 -6.848628 6.549992 -34.518214 3 +tr -6.79342 17.709198 14.549993 -9.997033 7.590977 15.186168 -10.961024 16.989401 15.505487 3 +tr -5.575056 17.528223 16.341564 -6.331264 5.87811 16.250119 -6.79342 17.709198 14.549993 3 +tr -9.732927 16.744806 20.320761 -7.38274 5.765913 20.814399 -8.955523 16.776154 21.793997 3 +tr -6.56953 16.979310 20.321110 -5.345784 6.348670 17.741123 -5.425251 17.109808 19.374949 3 +tr -5.425251 17.109808 19.374949 -5.345784 6.348670 17.741123 -5.942006 17.441925 16.967269 3 +tr -10.961024 16.989401 15.505487 -9.476644 5.926096 18.672105 -9.66603 16.867134 19.413126 3 +tr -6.814725 0.797058 23.492232 -5.92234 -1.940133 17.182732 -5.345784 6.348670 17.741123 3 +tr -5.92234 -1.940133 17.182732 -9.578326 0.566217 23.332426 -9.298287 -1.955340 17.206516 3 +tr -5.345784 6.348670 17.741123 -5.92234 -1.940133 17.182732 -6.331264 5.87811 16.250119 3 +tr -6.331264 5.87811 16.250119 -9.298287 -1.955340 17.206516 -9.161567 5.132270 16.926331 3 +tr -9.476644 5.926096 18.672105 -8.904842 0.225407 25.209337 -7.38274 5.765913 20.814399 3 +tr -7.38274 5.765913 20.814399 -6.814725 0.797058 23.492232 -5.345784 6.348670 17.741123 3 +tr -9.161567 5.132270 16.926331 -9.578326 0.566217 23.332426 -9.476644 5.926096 18.672105 3 +tr -8.998527 19.988350 -40.858893 -9.843740 19.303761 -39.842998 -7.25452 28.72905 -37.469357 3 +tr -8.221186 20.654619 -31.536822 -5.23292 17.745190 -34.2270 -8.928103 32.333770 -17.8618 3 +tr -5.284142 18.720396 -38.681575 -7.713236 19.576533 -39.450867 -5.499862 27.594796 -35.821728 3 +tr -8.350112 16.26572 -34.689819 -5.23292 17.745190 -34.2270 -8.221186 20.654619 -31.536822 3 +tr -10.816832 17.618964 -37.755034 -8.221186 20.654619 -31.536822 -12.402844 30.546070 -27.255341 3 +tr -6.848628 6.549992 -34.518214 -5.462411 4.365971 -34.79413 -5.23292 17.745190 -34.2270 3 +tr -10.668105 7.311106 -35.52418 -7.48800 6.461365 -33.565356 -8.350112 16.26572 -34.689819 3 +tr -5.462411 4.365971 -34.79413 -7.67991 0.104527 -35.610756 -5.216159 15.923059 -39.691772 3 +tr -7.48800 6.461365 -33.565356 -6.848628 6.549992 -34.518214 -8.350112 16.26572 -34.689819 3 +tr -7.67991 0.104527 -35.610756 -10.668105 7.311106 -35.52418 -8.986315 16.314198 -41.672500 3 +tr -5.523240 -1.878250 -32.43233 -7.67991 0.104527 -35.610756 -5.462411 4.365971 -34.79413 3 +tr -8.58152 0.282303 -28.235185 -10.686859 -1.897586 -32.74286 -6.414394 0.235170 -28.249870 3 +tr -7.67991 0.104527 -35.610756 -5.523240 -1.878250 -32.43233 -10.686859 -1.897586 -32.74286 3 +tr -10.686859 -1.897586 -32.74286 -8.58152 0.282303 -28.235185 -10.633473 3.212086 -33.11299 3 +tr -6.414394 0.235170 -28.249870 -5.462411 4.365971 -34.79413 -6.848628 6.549992 -34.518214 3 +tr -8.58152 0.282303 -28.235185 -6.414394 0.235170 -28.249870 -7.48800 6.461365 -33.565356 3 +tr -6.79342 17.709198 14.549993 -10.961024 16.989401 15.505487 -10.671535 27.981525 13.414047 3 +tr -9.997033 7.590977 15.186168 -9.161567 5.132270 16.926331 -10.961024 16.989401 15.505487 3 +tr -5.942006 17.441925 16.967269 -5.575056 17.528223 16.341564 -4.378565 25.564862 16.400618 3 +tr -9.66603 16.867134 19.413126 -9.732927 16.744806 20.320761 -10.766617 24.872164 19.955320 3 +tr -8.955523 16.776154 21.793997 -6.56953 16.979310 20.321110 -8.881085 26.678217 22.674994 3 +tr -6.331264 5.87811 16.250119 -9.997033 7.590977 15.186168 -6.79342 17.709198 14.549993 3 +tr -9.161567 5.132270 16.926331 -9.476644 5.926096 18.672105 -10.961024 16.989401 15.505487 3 +tr -9.298287 -1.955340 17.206516 -9.578326 0.566217 23.332426 -9.161567 5.132270 16.926331 3 +tr -6.331264 5.87811 16.250119 -9.161567 5.132270 16.926331 -9.997033 7.590977 15.186168 3 +tr -6.814725 0.797058 23.492232 -8.904842 0.225407 25.209337 -5.92234 -1.940133 17.182732 3 +tr -8.904842 0.225407 25.209337 -9.578326 0.566217 23.332426 -5.92234 -1.940133 17.182732 3 +tr -5.92234 -1.940133 17.182732 -9.298287 -1.955340 17.206516 -6.331264 5.87811 16.250119 3 +tr -9.578326 0.566217 23.332426 -8.904842 0.225407 25.209337 -9.476644 5.926096 18.672105 3 +tr -8.904842 0.225407 25.209337 -6.814725 0.797058 23.492232 -7.38274 5.765913 20.814399 3 +tr 8.267072 16.744806 20.320761 6.961725 5.765913 20.814399 8.523355 5.926096 18.672105 3 +tr 8.523355 5.926096 18.672105 8.933396 16.867134 19.413126 8.267072 16.744806 20.320761 3 +tr -5.575056 17.528223 16.341564 -5.942006 17.441925 16.967269 -5.345784 6.348670 17.741123 3 +tr -5.345784 6.348670 17.741123 -6.331264 5.87811 16.250119 -5.575056 17.528223 16.341564 3 +tr -6.56953 16.979310 20.321110 -8.955523 16.776154 21.793997 -7.38274 5.765913 20.814399 3 +tr -7.38274 5.765913 20.814399 -5.345784 6.348670 17.741123 -6.56953 16.979310 20.321110 3 +tr 7.44476 16.776154 21.793997 8.267072 16.744806 20.320761 9.233382 24.872164 19.955320 3 +tr 9.233382 24.872164 19.955320 7.118914 26.678217 22.674994 7.44476 16.776154 21.793997 3 +tr 5.943046 16.979310 20.321110 4.654186 6.348670 17.741123 6.961725 5.765913 20.814399 3 +tr 6.961725 5.765913 20.814399 7.44476 16.776154 21.793997 5.943046 16.979310 20.321110 3 +tr 4.424944 17.528223 16.341564 5.668706 5.87811 16.250119 4.654186 6.348670 17.741123 3 +tr 4.654186 6.348670 17.741123 4.57993 17.441894 16.967269 4.424944 17.528223 16.341564 3 +tr -5.425251 17.109808 19.374949 -5.499630 27.181681 20.904129 -8.881085 26.678217 22.674994 3 +tr -8.881085 26.678217 22.674994 -6.56953 16.979310 20.321110 -5.425251 17.109808 19.374949 3 +tr -5.942006 17.441925 16.967269 -4.378565 25.564862 16.400618 -5.499630 27.181681 20.904129 3 +tr -5.499630 27.181681 20.904129 -5.425251 17.109808 19.374949 -5.942006 17.441925 16.967269 3 +tr 4.574748 17.109808 19.374949 5.943046 16.979310 20.321110 7.118914 26.678217 22.674994 3 +tr 7.118914 26.678217 22.674994 4.500369 27.181681 20.904129 4.574748 17.109808 19.374949 3 +tr 4.57993 17.441894 16.967269 4.574748 17.109808 19.374949 4.500369 27.181681 20.904129 3 +tr 4.500369 27.181681 20.904129 3.621434 25.564862 16.400618 4.57993 17.441894 16.967269 3 +tr -8.955523 16.776154 21.793997 -8.881085 26.678217 22.674994 -10.766617 24.872164 19.955320 3 +tr -10.766617 24.872164 19.955320 -9.732927 16.744806 20.320761 -8.955523 16.776154 21.793997 3 +tr -9.732927 16.744806 20.320761 -9.66603 16.867134 19.413126 -9.476644 5.926096 18.672105 3 +tr -9.476644 5.926096 18.672105 -7.38274 5.765913 20.814399 -9.732927 16.744806 20.320761 3 +tr 8.523355 5.926096 18.672105 9.38975 16.989401 15.505487 8.933396 16.867134 19.413126 3 +tr 3.621434 25.564862 16.400618 5.920657 17.709198 14.549993 4.424944 17.528223 16.341564 3 +tr -4.378565 25.564862 16.400618 -5.575056 17.528223 16.341564 -6.79342 17.709198 14.549993 3 +tr -10.766617 24.872164 19.955320 -10.961024 16.989401 15.505487 -9.66603 16.867134 19.413126 3 +tr -7.713236 19.576533 -39.450867 -5.284142 18.720396 -38.681575 -5.216159 15.923059 -39.691772 3 +tr -5.216159 15.923059 -39.691772 -8.986315 16.314198 -41.672500 -7.713236 19.576533 -39.450867 3 +tr 6.286793 19.576533 -39.450867 7.13714 16.314198 -41.672500 4.783840 15.923059 -39.691772 3 +tr 4.783840 15.923059 -39.691772 4.715857 18.720396 -38.681575 6.286793 19.576533 -39.450867 3 +tr 8.156288 19.303761 -39.842998 8.628612 15.798697 -39.192928 7.13714 16.314198 -41.672500 3 +tr 7.13714 16.314198 -41.672500 7.1472 19.988350 -40.858893 8.156288 19.303761 -39.842998 3 +tr -9.843740 19.303761 -39.842998 -8.998527 19.988350 -40.858893 -8.986315 16.314198 -41.672500 3 +tr -8.986315 16.314198 -41.672500 -9.371387 15.798697 -39.192928 -9.843740 19.303761 -39.842998 3 +tr -9.246675 18.937077 -38.370131 -10.816832 17.618964 -37.755034 -10.890164 27.907665 -35.734993 3 +tr -9.371387 15.798697 -39.192928 -10.816832 17.618964 -37.755034 -9.246675 18.937077 -38.370131 3 +tr 8.753351 18.937048 -38.370131 9.109835 27.907665 -35.734993 9.183167 17.618964 -37.755034 3 +tr 8.628612 15.798697 -39.192928 8.753351 18.937048 -38.370131 9.183167 17.618964 -37.755034 3 +tr 1.544795 55.42628 66.616386 0.0 56.19730 66.624329 0.0 53.720505 66.624854 3 +tr -2.455175 55.42628 66.616386 0.0 53.720505 66.624854 0.0 56.19730 66.624329 3 \ No newline at end of file diff --git a/scenes/roughness.rt b/scenes/roughness.rt index fe86dc4..b5c6cff 100644 --- a/scenes/roughness.rt +++ b/scenes/roughness.rt @@ -1,4 +1,4 @@ - +CAM 0 1 2 MAT 255 255 255 7.5 0.0 0.0 // white light 0 @@ -20,6 +20,7 @@ MAT 255 255 255 0.0 1.0 0.15 // tomato 12 MAT 255 255 255 0.0 1.0 0.4 // tomato 13 MAT 255 255 255 0.0 1.0 1.0 // tomato 14 + pl 0 0 -3 0 0 1 4 // back wall pl 0 0 3 0 0 -1 5 // front wall pl 4 0 0 -1 0 0 3 // right wall diff --git a/scenes/test.rt b/scenes/test.rt index 10105ee..300224e 100644 --- a/scenes/test.rt +++ b/scenes/test.rt @@ -1,10 +1,11 @@ MAT 255 255 255 0.0 0.0 0.0 //white -MAT 255 100 100 0.0 0.0 0.0 //red +MAT 255 100 100 0.0 1.0 1.0 //red MAT 255 255 255 5.0 0.0 0.0 //sun +CAM 0 100 0 pl 0 -1 0 0 1 0 0 -cu 0 1 -3 1 1 1 +tr 0 0 0 1 0 0 0 0 1 0 sp 15 30 -30 30 2 diff --git a/shaders/compute.glsl b/shaders/compute.glsl index 82f3074..4bc63dd 100644 --- a/shaders/compute.glsl +++ b/shaders/compute.glsl @@ -15,8 +15,8 @@ struct GPUObject { float radius; // 4 vec3 normal; // 12 + 4 - vec3 edge1; // 12 + 4 - vec3 edge2; // 12 + 4 + vec3 vertex1; // 12 + 4 + vec3 vertex2; // 12 + 4 int type; // 4 }; @@ -109,9 +109,16 @@ vec3 pathtrace(Ray ray, inout uint rng_state) GPUObject obj = objects[hit.obj_index]; - color *= obj.color; + // RR + float p = max(color.r, max(color.g, color.b)); + if (randomValue(rng_state) > p) + break; + color /= p; + // + color *= obj.color; light += obj.emission * obj.color; + if (obj.emission > 0.0) break; diff --git a/shaders/intersect.glsl b/shaders/intersect.glsl index 5e36307..a356327 100644 --- a/shaders/intersect.glsl +++ b/shaders/intersect.glsl @@ -31,23 +31,19 @@ bool intersectPlane(Ray ray, GPUObject obj, out hitInfo hit) bool intersectQuad(Ray ray, GPUObject obj, out hitInfo hit) { - // obj.edge1 and obj.edge2 are the two edge vectors from quad origin - vec3 normal = normalize(cross(obj.edge1, obj.edge2)); + vec3 normal = normalize(cross(obj.vertex1, obj.vertex2)); float d = dot(normal, ray.direction); float t = dot(obj.position - ray.origin, normal) / d; if (t <= 0.0 || d == 0.0) return (false); - // Get hit point relative to quad origin vec3 p = ray.origin + ray.direction * t - obj.position; - // Project hit point onto edges using dot product - float e1 = dot(p, obj.edge1); - float e2 = dot(p, obj.edge2); + float e1 = dot(p, obj.vertex1); + float e2 = dot(p, obj.vertex2); - // Check if point is inside quad using edge lengths - float l1 = dot(obj.edge1, obj.edge1); - float l2 = dot(obj.edge2, obj.edge2); + float l1 = dot(obj.vertex1, obj.vertex1); + float l2 = dot(obj.vertex2, obj.vertex2); bool inside = e1 >= 0.0 && e1 <= l1 && e2 >= 0.0 && e2 <= l2; @@ -58,6 +54,60 @@ bool intersectQuad(Ray ray, GPUObject obj, out hitInfo hit) return (inside); } +// bool intersectTriangle(Ray ray, GPUObject obj, out hitInfo hit) +// { +// vec3 pvec = cross(ray.direction, obj.vertex2); +// float det = dot(obj.vertex1, pvec); +// vec3 tvec = ray.origin - obj.position; + +// float invDet = 1.0 / det; +// float u = dot(tvec, pvec) * invDet; +// vec3 qvec = cross(tvec, obj.vertex1); +// float v = dot(ray.direction, qvec) * invDet; +// float t = dot(obj.vertex2, qvec) * invDet; + +// bool valid = abs(det) > 1e-8 && +// u >= 0.0 && u <= 1.0 && +// v >= 0.0 && (u + v) <= 1.0 && +// t > 0.0; + +// hit.t = t; +// hit.position = ray.origin + ray.direction * t; +// hit.normal = obj.normal * sign(-dot(ray.direction, obj.normal)); + +// return (valid); +// } + +bool intersectTriangle(Ray ray, GPUObject obj, out hitInfo hit) +{ + vec3 pvec = cross(ray.direction, obj.vertex2); + float det = dot(obj.vertex1, pvec); + + if (abs(det) < 1e-8) return (false); // det < 0.0 + + float invDet = 1.0 / det; + + vec3 tvec = ray.origin - obj.position; + + float u = dot(tvec, pvec) * invDet; + if (u < 0.0 || u > 1.0) return (false); + + vec3 qvec = cross(tvec, obj.vertex1); + float v = dot(ray.direction, qvec) * invDet; + if (v < 0.0 || u + v > 1.0) return (false); + + float t = dot(obj.vertex2, qvec) * invDet; + if (t <= 0.0) return (false); + + hit.t = t; + hit.position = ray.origin + ray.direction * t; + + vec3 normal = obj.normal; + hit.normal = dot(ray.direction, normal) < 0.0 ? normal : -normal; + + return (true); +} + bool intersect(Ray ray, GPUObject obj, out hitInfo hit) { if (obj.type == 0) @@ -66,6 +116,8 @@ bool intersect(Ray ray, GPUObject obj, out hitInfo hit) return (intersectPlane(ray, obj, hit)); if (obj.type == 2) return (intersectQuad(ray, obj, hit)); + if (obj.type == 3) + return (intersectTriangle(ray, obj, hit)); return (false); } \ No newline at end of file diff --git a/shaders/random.glsl b/shaders/random.glsl index 3229a83..fd8556a 100644 --- a/shaders/random.glsl +++ b/shaders/random.glsl @@ -1,9 +1,9 @@ float randomValue(inout uint rng_state) { - rng_state = rng_state * 747796405 + 2891336453; - uint result = ((rng_state >> ((rng_state >> 28) + 4)) ^ rng_state) * 277803737; - result = (result >> 22) ^ result; - return (result / 4294967295.0); + rng_state = rng_state * 747796405u + 2891336453u; + uint result = ((rng_state >> ((rng_state >> 28u) + 4u)) ^ rng_state) * 277803737u; + result = (result >> 22u) ^ result; + return (float(result) * (1.0 / 4294967295.0)); } float randomValueNormalDistribution(inout uint rng_state) @@ -25,4 +25,31 @@ vec3 randomHemisphereDirection(vec3 normal, inout uint rng_state) { vec3 direction = randomDirection(rng_state); return (direction * sign(dot(normal, direction))); -} \ No newline at end of file +} + +#define M_PI 3.1415926535897932384626433832795 + +// vec3 randomHemisphereDirection(vec3 normal, inout uint rng_state) +// { +// float r1 = randomValue(rng_state); +// float r2 = randomValue(rng_state); + +// float phi = 2.0 * M_PI * r1; +// float cos_theta = sqrt(1.0 - r2); +// float sin_theta = sqrt(r2); + +// // Create orthonormal basis +// vec3 tangent, bitangent; +// if (abs(normal.x) > abs(normal.z)) { +// tangent = normalize(vec3(-normal.y, normal.x, 0.0)); +// } else { +// tangent = normalize(vec3(0.0, -normal.z, normal.y)); +// } +// bitangent = cross(normal, tangent); + +// return normalize( +// tangent * (cos(phi) * sin_theta) + +// bitangent * (sin(phi) * sin_theta) + +// normal * cos_theta +// ); +// } \ No newline at end of file diff --git a/srcs/class/Camera.cpp b/srcs/class/Camera.cpp index 665bd0d..13af644 100644 --- a/srcs/class/Camera.cpp +++ b/srcs/class/Camera.cpp @@ -38,7 +38,7 @@ void Camera::updateCameraVectors() void Camera::update(float delta_time) { - delta_time = std::min(delta_time, 0.1f); + delta_time = std::min(delta_time, 0.01f); _velocity += _acceleration * delta_time; diff --git a/srcs/class/Scene.cpp b/srcs/class/Scene.cpp index f0a4ef5..3668452 100644 --- a/srcs/class/Scene.cpp +++ b/srcs/class/Scene.cpp @@ -93,8 +93,15 @@ void Scene::updateGPUData() else if (obj->getType() == Object::Type::QUAD) { auto quad = static_cast(obj); - gpu_obj.edge1 = quad->getEdge1(); - gpu_obj.edge2 = quad->getEdge2(); + gpu_obj.vertex1 = quad->getEdge1(); + gpu_obj.vertex2 = quad->getEdge2(); + } + else if (obj->getType() == Object::Type::TRIANGLE) + { + auto triangle = static_cast(obj); + gpu_obj.vertex1 = triangle->getVertex2(); + gpu_obj.vertex2 = triangle->getVertex3(); + gpu_obj.normal = triangle->getNormal(); } _gpu_objects.push_back(gpu_obj); diff --git a/srcs/class/SceneParser.cpp b/srcs/class/SceneParser.cpp index 82b67ca..886bca5 100644 --- a/srcs/class/SceneParser.cpp +++ b/srcs/class/SceneParser.cpp @@ -31,6 +31,12 @@ SceneParser::SceneParser(Scene *scene) : _scene(scene) try { return (new Quad(ss)); } catch (const std::exception &e) { throw; } }; + + object_parsers["tr"] = [](std::stringstream &ss) -> Object * + { + try { return (new Triangle(ss)); } + catch (const std::exception &e) { throw; } + }; } void SceneParser::parseMaterial(std::stringstream &line)