From 6eb50bf29fdc87017218ef50d795055e6a32f736 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Mon, 8 Apr 2024 17:16:48 +0200 Subject: [PATCH 01/19] feat: debut de la physique, ajout de la gravite --- enginecustom/applicationclass.cpp | 29 ++++++++++++++------ enginecustom/applicationclass.h | 3 +++ enginecustom/enginecustom.vcxproj | 2 ++ enginecustom/enginecustom.vcxproj.filters | 6 +++++ enginecustom/imgui.ini | 2 +- enginecustom/physics.cpp | 32 +++++++++++++++++++++++ enginecustom/physics.h | 22 ++++++++++++++++ 7 files changed, 87 insertions(+), 9 deletions(-) create mode 100644 enginecustom/physics.cpp create mode 100644 enginecustom/physics.h diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index bc6974c..56c669a 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -30,6 +30,7 @@ ApplicationClass::ApplicationClass() m_Frustum = 0; m_DisplayPlane = 0; m_ReflectionShader = 0; + m_Physics = 0; } @@ -388,6 +389,8 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) return false; } + m_Physics = new Physics; + return true; } @@ -626,7 +629,7 @@ bool ApplicationClass::Frame(InputClass* Input) static int lastMouseX = 0, lastMouseY = 0; static float rotation = 360.0f; - static float x = 6.f; + static float x = 0.f; static float y = 3.f; static float z = 0.f; @@ -710,13 +713,23 @@ bool ApplicationClass::Frame(InputClass* Input) rotation += 360.0f; } - // Update the x position variable each frame. - x -= 0.0174532925f * 0.6f; + //// Update the x position variable each frame. + //x -= 0.0174532925f * 0.6f; - y -= 0.0174532925f * 0.2f; + //y -= 0.0174532925f * 0.2f; - // Update the z position variable each frame. - z -= 0.0174532925f * 0.2f; + //// Update the z position variable each frame. + //z -= 0.0174532925f * 0.2f; + + for (auto object : m_object) + { + m_Physics->ApplyGravity(object, frameTime); + if (XMVectorGetY(object->GetPosition()) < -10.0f) + { + object->SetPosition(XMVectorSet(0.0f, 20.0f, 0.0f, 0.0f)); + } + } + // Render the scene to a render texture. result = RenderSceneToTexture(rotation); @@ -838,7 +851,7 @@ bool ApplicationClass::Render(float rotation, float x, float y, float z) cube->Render(m_Direct3D->GetDeviceContext()); - result = m_LightShader->Render(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, m_Model->GetTexture(0), + result = m_LightShader->Render(m_Direct3D->GetDeviceContext(), cube->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, cube->GetTexture(0), diffuseColor, lightPosition); if (!result) { @@ -861,7 +874,7 @@ bool ApplicationClass::Render(float rotation, float x, float y, float z) object->Render(m_Direct3D->GetDeviceContext()); - result = m_LightShader->Render(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, m_Model->GetTexture(0), + result = m_LightShader->Render(m_Direct3D->GetDeviceContext(), object->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, object->GetTexture(0), diffuseColor, lightPosition); if (!result) diff --git a/enginecustom/applicationclass.h b/enginecustom/applicationclass.h index 820f2d7..48a1f8d 100644 --- a/enginecustom/applicationclass.h +++ b/enginecustom/applicationclass.h @@ -34,6 +34,7 @@ #include "displayplaneclass.h" #include "translateshaderclass.h" #include "reflectionshaderclass.h" +#include "physics.h" ///////////// @@ -157,6 +158,8 @@ private : TextClass* m_FpsString; int m_previousFps; + Physics* m_Physics; + float m_gravity; }; #endif \ No newline at end of file diff --git a/enginecustom/enginecustom.vcxproj b/enginecustom/enginecustom.vcxproj index 81c17e5..5d31d16 100644 --- a/enginecustom/enginecustom.vcxproj +++ b/enginecustom/enginecustom.vcxproj @@ -48,6 +48,7 @@ + @@ -90,6 +91,7 @@ + diff --git a/enginecustom/enginecustom.vcxproj.filters b/enginecustom/enginecustom.vcxproj.filters index 07bef64..76766ec 100644 --- a/enginecustom/enginecustom.vcxproj.filters +++ b/enginecustom/enginecustom.vcxproj.filters @@ -156,6 +156,9 @@ Fichiers sources + + Fichiers sources + @@ -281,6 +284,9 @@ Fichiers d%27en-tête + + Fichiers d%27en-tête + diff --git a/enginecustom/imgui.ini b/enginecustom/imgui.ini index 21e4b2c..8f6e492 100644 --- a/enginecustom/imgui.ini +++ b/enginecustom/imgui.ini @@ -11,6 +11,6 @@ Pos=222,19 Size=492,353 [Window][Terrain] -Pos=892,19 +Pos=890,19 Size=418,94 diff --git a/enginecustom/physics.cpp b/enginecustom/physics.cpp new file mode 100644 index 0000000..3e7eff7 --- /dev/null +++ b/enginecustom/physics.cpp @@ -0,0 +1,32 @@ +#include "physics.h" + +Physics::Physics() +{ + m_gravity = -9.81f; +} + + +Physics::Physics(const Physics& other) +{ + m_gravity = other.m_gravity; // Copy gravity value from the other object +} + + +Physics::~Physics() +{ +} + +float Physics::GetGravity() // Changed the method to return the gravity value +{ + return m_gravity; +} + +void Physics::ApplyGravity(Object* object, float frameTime) +{ + // Update the position of the object by adding the change in position due to gravity. + XMVECTOR position = object->GetPosition(); // Get the current position + position = XMVectorSetY(position, XMVectorGetY(position) + m_gravity * frameTime); // Update the y value + object->SetPosition(position); // Set the updated position + + return; +} \ No newline at end of file diff --git a/enginecustom/physics.h b/enginecustom/physics.h new file mode 100644 index 0000000..cfe9153 --- /dev/null +++ b/enginecustom/physics.h @@ -0,0 +1,22 @@ +#ifndef _PHYSICS_H_ +#define _PHYSICS_H_ + +#include "object.h" + +class Physics +{ +public: + public: + Physics(); + Physics(const Physics&); + ~Physics(); + + float GetGravity(); + void ApplyGravity(Object*, float); + +private: + float m_gravity; +}; + +#endif + From b37f253c5cc1bf4105cad0f384a46e3b306392b1 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Mon, 8 Apr 2024 17:32:10 +0200 Subject: [PATCH 02/19] feat: simplification gravite, respawn --- enginecustom/applicationclass.cpp | 19 ++++++++++++++++--- enginecustom/physics.cpp | 30 ++++++++++++++++++++---------- enginecustom/physics.h | 13 ++++++------- 3 files changed, 42 insertions(+), 20 deletions(-) diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index 56c669a..812f6c9 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -397,6 +397,13 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) void ApplicationClass::Shutdown() { + // Release the physics object. + if (m_Physics) + { + delete m_Physics; + m_Physics = 0; + } + // Release the frustum class object. if (m_Frustum) { @@ -723,10 +730,16 @@ bool ApplicationClass::Frame(InputClass* Input) for (auto object : m_object) { - m_Physics->ApplyGravity(object, frameTime); - if (XMVectorGetY(object->GetPosition()) < -10.0f) + if (object != nullptr) // Vérifie que l'objet n'est pas nullptr { - object->SetPosition(XMVectorSet(0.0f, 20.0f, 0.0f, 0.0f)); + m_Physics->ApplyGravity(object, frameTime); + if (XMVectorGetY(object->GetPosition()) < -10.0f) + { + // Obtenez la position actuelle de l'objet + XMVECTOR currentPosition = object->GetPosition(); + // Définissez la nouvelle position y tout en conservant les positions x et z actuelles + object->SetPosition(XMVectorSetY(currentPosition, 20.0f)); + } } } diff --git a/enginecustom/physics.cpp b/enginecustom/physics.cpp index 3e7eff7..def234b 100644 --- a/enginecustom/physics.cpp +++ b/enginecustom/physics.cpp @@ -1,32 +1,42 @@ #include "physics.h" + Physics::Physics() { - m_gravity = -9.81f; + m_gravity = -9.81f; // Initilize the gravity value } - Physics::Physics(const Physics& other) { - m_gravity = other.m_gravity; // Copy gravity value from the other object + m_gravity = other.m_gravity; // Copy the gravity value } - Physics::~Physics() { } -float Physics::GetGravity() // Changed the method to return the gravity value +// Get the gravity value +float Physics::GetGravity() { return m_gravity; } +// Define the gravity value +void Physics::SetGravity(float gravity) +{ + m_gravity = gravity; +} + +// Apply gravity to an object void Physics::ApplyGravity(Object* object, float frameTime) { - // Update the position of the object by adding the change in position due to gravity. - XMVECTOR position = object->GetPosition(); // Get the current position - position = XMVectorSetY(position, XMVectorGetY(position) + m_gravity * frameTime); // Update the y value - object->SetPosition(position); // Set the updated position + if (object == nullptr) // Verify if the object is not null + { + return; + } - return; + // Update the object position + XMVECTOR position = object->GetPosition(); + position = XMVectorSetY(position, XMVectorGetY(position) + m_gravity * frameTime); // Update the Y position + object->SetPosition(position); } \ No newline at end of file diff --git a/enginecustom/physics.h b/enginecustom/physics.h index cfe9153..125846d 100644 --- a/enginecustom/physics.h +++ b/enginecustom/physics.h @@ -3,20 +3,19 @@ #include "object.h" -class Physics +class Physics : public Object { public: - public: Physics(); - Physics(const Physics&); + explicit Physics(const Physics&); // Use explicit to avoid implicit conversion ~Physics(); - float GetGravity(); - void ApplyGravity(Object*, float); + float GetGravity(); // Get the gravity value + void SetGravity(float gravity); // Define the gravity value + void ApplyGravity(Object*, float); // Apply gravity to an object private: float m_gravity; }; -#endif - +#endif \ No newline at end of file From ebccd2cf6863d54fa6d83370f2d736cb6887ca24 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Tue, 9 Apr 2024 12:30:37 +0200 Subject: [PATCH 03/19] feat: ajout de la trainee (drag) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit j'espere que c'est bien comme ça que ça marche --- enginecustom/applicationclass.cpp | 19 ++++++++++----- enginecustom/applicationclass.h | 1 + enginecustom/enginecustom.vcxproj.filters | 8 +++++-- enginecustom/imgui.ini | 6 ++--- enginecustom/object.cpp | 12 ++++++++++ enginecustom/object.h | 5 ++++ enginecustom/physics.cpp | 29 +++++++++++++++++++---- enginecustom/physics.h | 2 ++ 8 files changed, 67 insertions(+), 15 deletions(-) diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index 812f6c9..c1caa1c 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -728,18 +728,25 @@ bool ApplicationClass::Frame(InputClass* Input) //// Update the z position variable each frame. //z -= 0.0174532925f * 0.2f; + + for (auto object : m_object) { - if (object != nullptr) // Vérifie que l'objet n'est pas nullptr + if (object != nullptr) // Check if the object is not null { - m_Physics->ApplyGravity(object, frameTime); if (XMVectorGetY(object->GetPosition()) < -10.0f) { - // Obtenez la position actuelle de l'objet - XMVECTOR currentPosition = object->GetPosition(); - // Définissez la nouvelle position y tout en conservant les positions x et z actuelles - object->SetPosition(XMVectorSetY(currentPosition, 20.0f)); + XMVECTOR currentPosition = object->GetPosition(); // Obtain the current position of the object + object->SetPosition(XMVectorSetY(currentPosition, 20.0f)); // Define the new position of the object } + m_Physics->ApplyGravity(object, frameTime); + m_Physics->ApplyDrag(object, 0.1f, frameTime); + // Update object position based on its velocity + XMVECTOR position = object->GetPosition(); + XMVECTOR velocity = object->GetVelocity(); + position = position + velocity * frameTime; + object->SetPosition(position); + object->m_previousPosition = object->GetPosition(); } } diff --git a/enginecustom/applicationclass.h b/enginecustom/applicationclass.h index 48a1f8d..87550cc 100644 --- a/enginecustom/applicationclass.h +++ b/enginecustom/applicationclass.h @@ -160,6 +160,7 @@ private : Physics* m_Physics; float m_gravity; + XMVECTOR m_previousPosition; }; #endif \ No newline at end of file diff --git a/enginecustom/enginecustom.vcxproj.filters b/enginecustom/enginecustom.vcxproj.filters index 76766ec..c1fdf02 100644 --- a/enginecustom/enginecustom.vcxproj.filters +++ b/enginecustom/enginecustom.vcxproj.filters @@ -382,8 +382,12 @@ shader - - + + shader + + + shader + diff --git a/enginecustom/imgui.ini b/enginecustom/imgui.ini index 8f6e492..c6ae898 100644 --- a/enginecustom/imgui.ini +++ b/enginecustom/imgui.ini @@ -3,14 +3,14 @@ Pos=60,60 Size=400,400 [Window][Khaotic Engine] -Pos=819,137 +Pos=587,47 Size=694,210 [Window][Objects] -Pos=222,19 +Pos=91,47 Size=492,353 [Window][Terrain] -Pos=890,19 +Pos=1120,255 Size=418,94 diff --git a/enginecustom/object.cpp b/enginecustom/object.cpp index a4304c0..35354a1 100644 --- a/enginecustom/object.cpp +++ b/enginecustom/object.cpp @@ -7,6 +7,8 @@ Object::Object() : ModelClass() m_translateMatrix = XMMatrixIdentity(); m_srMatrix = XMMatrixIdentity(); m_worldMatrix = XMMatrixIdentity(); + m_previousPosition = XMVectorZero(); + m_velocity = XMVectorZero(); } Object::~Object() @@ -161,4 +163,14 @@ std::string Object::GetName() void Object::SetName(std::string name) { m_name = name; +} + +void Object::SetVelocity(XMVECTOR velocity) +{ + m_velocity = velocity; +} + +XMVECTOR Object::GetVelocity() +{ + return m_velocity; } \ No newline at end of file diff --git a/enginecustom/object.h b/enginecustom/object.h index c7045f3..5f63163 100644 --- a/enginecustom/object.h +++ b/enginecustom/object.h @@ -27,6 +27,9 @@ public: XMVECTOR GetRotation(); XMVECTOR GetScale(); + void SetVelocity(XMVECTOR); + XMVECTOR GetVelocity(); + void UpdateWorldMatrix(); void UpdateSRMatrix(); void UpdateScaleMatrix(); @@ -40,6 +43,8 @@ public: public : bool m_demoSpinning = false; + XMVECTOR m_previousPosition; + XMVECTOR m_velocity; private: XMMATRIX m_scaleMatrix; diff --git a/enginecustom/physics.cpp b/enginecustom/physics.cpp index def234b..f2a371e 100644 --- a/enginecustom/physics.cpp +++ b/enginecustom/physics.cpp @@ -35,8 +35,29 @@ void Physics::ApplyGravity(Object* object, float frameTime) return; } - // Update the object position - XMVECTOR position = object->GetPosition(); - position = XMVectorSetY(position, XMVectorGetY(position) + m_gravity * frameTime); // Update the Y position - object->SetPosition(position); + // Get the object velocity + XMVECTOR velocity = object->GetVelocity(); + + // Update the Y component of the velocity + velocity = XMVectorSetY(velocity, XMVectorGetY(velocity) + m_gravity * frameTime); + + // Set the new velocity + object->SetVelocity(velocity); +} + +void Physics::ApplyDrag(Object* object, float dragValue, float frameTime) +{ + if (object == nullptr) // Verify if the object is not null + { + return; + } + + // Get the velocity of the object + XMVECTOR velocity = object->GetVelocity(); + + // Calculate the new velocity + XMVECTOR newVelocity = velocity - (velocity * dragValue * frameTime); + + // Update the velocity of the object + object->SetVelocity(newVelocity); } \ No newline at end of file diff --git a/enginecustom/physics.h b/enginecustom/physics.h index 125846d..0084708 100644 --- a/enginecustom/physics.h +++ b/enginecustom/physics.h @@ -13,6 +13,8 @@ public: float GetGravity(); // Get the gravity value void SetGravity(float gravity); // Define the gravity value void ApplyGravity(Object*, float); // Apply gravity to an object + void ApplyDrag(Object*, float, float); + private: float m_gravity; From 56ed2d1d5f2b2668eccdb63a8ac93a36cee2d5ae Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Tue, 9 Apr 2024 12:52:32 +0200 Subject: [PATCH 04/19] feat: gravite dans toutes les directions --- enginecustom/applicationclass.cpp | 2 +- enginecustom/physics.cpp | 11 +++++------ enginecustom/physics.h | 7 +++---- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index c1caa1c..ce87f5f 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -740,7 +740,7 @@ bool ApplicationClass::Frame(InputClass* Input) object->SetPosition(XMVectorSetY(currentPosition, 20.0f)); // Define the new position of the object } m_Physics->ApplyGravity(object, frameTime); - m_Physics->ApplyDrag(object, 0.1f, frameTime); + m_Physics->ApplyDrag(object, 1.0f, frameTime); // Update object position based on its velocity XMVECTOR position = object->GetPosition(); XMVECTOR velocity = object->GetVelocity(); diff --git a/enginecustom/physics.cpp b/enginecustom/physics.cpp index f2a371e..cc7561d 100644 --- a/enginecustom/physics.cpp +++ b/enginecustom/physics.cpp @@ -1,9 +1,8 @@ #include "physics.h" -Physics::Physics() +Physics::Physics() : m_gravity(XMVectorSet(0.0f, -9.81f, 0.0f, 0.0f)) // Initialize the gravity vector { - m_gravity = -9.81f; // Initilize the gravity value } Physics::Physics(const Physics& other) @@ -16,13 +15,13 @@ Physics::~Physics() } // Get the gravity value -float Physics::GetGravity() +XMVECTOR Physics::GetGravity() { return m_gravity; } // Define the gravity value -void Physics::SetGravity(float gravity) +void Physics::SetGravity(XMVECTOR gravity) { m_gravity = gravity; } @@ -38,8 +37,8 @@ void Physics::ApplyGravity(Object* object, float frameTime) // Get the object velocity XMVECTOR velocity = object->GetVelocity(); - // Update the Y component of the velocity - velocity = XMVectorSetY(velocity, XMVectorGetY(velocity) + m_gravity * frameTime); + // Update the velocity with gravity + velocity += m_gravity * frameTime; // Set the new velocity object->SetVelocity(velocity); diff --git a/enginecustom/physics.h b/enginecustom/physics.h index 0084708..1a2893d 100644 --- a/enginecustom/physics.h +++ b/enginecustom/physics.h @@ -10,14 +10,13 @@ public: explicit Physics(const Physics&); // Use explicit to avoid implicit conversion ~Physics(); - float GetGravity(); // Get the gravity value - void SetGravity(float gravity); // Define the gravity value + XMVECTOR GetGravity(); // Get the gravity value + void SetGravity(XMVECTOR gravity); // Define the gravity value void ApplyGravity(Object*, float); // Apply gravity to an object void ApplyDrag(Object*, float, float); - private: - float m_gravity; + XMVECTOR m_gravity; }; #endif \ No newline at end of file From 13729b62fcea4e8539e8db6cf59ffb0d3cbaeff1 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Thu, 11 Apr 2024 10:37:56 +0200 Subject: [PATCH 05/19] feat: acceleration, mass, mouvement cube implementation de l'acceleration, de la masse (je sais pas si c'est une bonne facon de faire mais on va dire oui) mouvements avec un code tres sale dans application class frame --- enginecustom/applicationclass.cpp | 66 +++++++++++++++++++++++++------ enginecustom/imgui.ini | 4 +- enginecustom/inputclass.cpp | 21 ++++++++++ enginecustom/inputclass.h | 2 + enginecustom/object.cpp | 22 +++++++++++ enginecustom/object.h | 7 ++++ enginecustom/physics.cpp | 61 ++++++++++++++++++++-------- enginecustom/physics.h | 1 + 8 files changed, 153 insertions(+), 31 deletions(-) diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index ce87f5f..d9b699c 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -628,7 +628,7 @@ void ApplicationClass::Shutdown() bool ApplicationClass::Frame(InputClass* Input) { int mouseX, mouseY, currentMouseX, currentMouseY; - bool result, leftMouseDown, rightMouseDown, keyDown, buttonQ, buttonD, buttonZ, buttonS, buttonA, buttonE; + bool result, leftMouseDown, rightMouseDown, keyLeft, keyRight, keyUp, keyDown, buttonQ, buttonD, buttonZ, buttonS, buttonA, buttonE; float rotationY, rotationX, positionX, positionY, positionZ; float frameTime; @@ -673,11 +673,11 @@ bool ApplicationClass::Frame(InputClass* Input) m_Position->SetFrameTime(m_Timer->GetTime()); // Check if the left or right arrow key has been pressed, if so rotate the camera accordingly. - keyDown = Input->IsLeftArrowPressed(); - m_Position->TurnLeft(keyDown); + //keyDown = Input->IsLeftArrowPressed(); + //m_Position->TurnLeft(keyDown); - keyDown = Input->IsRightArrowPressed(); - m_Position->TurnRight(keyDown); + //keyDown = Input->IsRightArrowPressed(); + //m_Position->TurnRight(keyDown); m_Position->TurnMouse(deltaX, deltaY, rightMouseDown); @@ -728,27 +728,66 @@ bool ApplicationClass::Frame(InputClass* Input) //// Update the z position variable each frame. //z -= 0.0174532925f * 0.2f; - + keyLeft = Input->IsLeftArrowPressed(); + keyRight = Input->IsRightArrowPressed(); + keyUp = Input->IsUpArrowPressed(); + keyDown = Input->IsDownArrowPressed(); for (auto object : m_object) { if (object != nullptr) // Check if the object is not null { + // Reset acceleration for the new frame + object->SetAcceleration(XMVectorZero()); + + // Apply forces + m_Physics->ApplyGravity(object, frameTime); + m_Physics->ApplyDrag(object, 1.0f, frameTime); + + float forceX = 0, forceY = 0, forceZ = 0, forceW = 0; + + if (keyLeft) + { + forceX = -10.0f; + } + if (keyRight) + { + forceX = 10.0f; + } + if (keyUp) + { + forceY = 40.0f; + } + if (keyDown) + { + forceY = -40.0f; + } + + XMVECTOR force = XMVectorSet(forceX, forceY, forceZ, forceW); + m_Physics->ApplyForce(object, force); + + // Update velocity based on acceleration + XMVECTOR velocity = object->GetVelocity(); + velocity = velocity + object->GetAcceleration() * frameTime; + object->SetVelocity(velocity); + + // Update position based on velocity + XMVECTOR position = object->GetPosition(); + position = position + velocity * frameTime; + object->SetPosition(position); + + // Check if the object has fallen below the ground if (XMVectorGetY(object->GetPosition()) < -10.0f) { XMVECTOR currentPosition = object->GetPosition(); // Obtain the current position of the object object->SetPosition(XMVectorSetY(currentPosition, 20.0f)); // Define the new position of the object } - m_Physics->ApplyGravity(object, frameTime); - m_Physics->ApplyDrag(object, 1.0f, frameTime); - // Update object position based on its velocity - XMVECTOR position = object->GetPosition(); - XMVECTOR velocity = object->GetVelocity(); - position = position + velocity * frameTime; - object->SetPosition(position); + object->m_previousPosition = object->GetPosition(); } } + + // Render the scene to a render texture. @@ -1266,6 +1305,7 @@ void ApplicationClass::AddKobject(WCHAR* filepath) Object* newObject = new Object(); newObject->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), modelFilename, textureFilename, textureFilename2, textureFilename3); + newObject->SetMass(1.0f); newObject->SetTranslateMatrix(XMMatrixTranslation(0.0f, 0.0f, 0.0f)); newObject->SetName(filename); diff --git a/enginecustom/imgui.ini b/enginecustom/imgui.ini index c6ae898..771a0fe 100644 --- a/enginecustom/imgui.ini +++ b/enginecustom/imgui.ini @@ -3,11 +3,11 @@ Pos=60,60 Size=400,400 [Window][Khaotic Engine] -Pos=587,47 +Pos=596,31 Size=694,210 [Window][Objects] -Pos=91,47 +Pos=87,45 Size=492,353 [Window][Terrain] diff --git a/enginecustom/inputclass.cpp b/enginecustom/inputclass.cpp index e6944fd..27840ea 100644 --- a/enginecustom/inputclass.cpp +++ b/enginecustom/inputclass.cpp @@ -276,6 +276,27 @@ bool InputClass::IsRightArrowPressed() return false; } +bool InputClass::IsUpArrowPressed() +{ + if (m_keyboardState[DIK_UP] & 0x80) + { + return true; + } + + return false; +} + + +bool InputClass::IsDownArrowPressed() +{ + if (m_keyboardState[DIK_DOWN] & 0x80) + { + return true; + } + + return false; +} + /////////////////////////////////////////////////// // Les touches correspondent aux claviers QWERTY // /////////////////////////////////////////////////// diff --git a/enginecustom/inputclass.h b/enginecustom/inputclass.h index 6aa5955..4354212 100644 --- a/enginecustom/inputclass.h +++ b/enginecustom/inputclass.h @@ -39,6 +39,8 @@ public: void KeyUp(unsigned int); bool IsLeftArrowPressed(); bool IsRightArrowPressed(); + bool IsUpArrowPressed(); + bool IsDownArrowPressed(); bool IsAPressed(); bool IsDPressed(); bool IsWPressed(); diff --git a/enginecustom/object.cpp b/enginecustom/object.cpp index 35354a1..1ae2f60 100644 --- a/enginecustom/object.cpp +++ b/enginecustom/object.cpp @@ -9,6 +9,8 @@ Object::Object() : ModelClass() m_worldMatrix = XMMatrixIdentity(); m_previousPosition = XMVectorZero(); m_velocity = XMVectorZero(); + m_acceleration = XMVectorZero(); + m_mass = 1.0f; } Object::~Object() @@ -173,4 +175,24 @@ void Object::SetVelocity(XMVECTOR velocity) XMVECTOR Object::GetVelocity() { return m_velocity; +} + +void Object::SetAcceleration(XMVECTOR acceleration) +{ + m_acceleration = acceleration; +} + +XMVECTOR Object::GetAcceleration() +{ + return m_acceleration; +} + +void Object::SetMass(float mass) +{ + m_mass = mass; +} + +float Object::GetMass() +{ + return m_mass; } \ No newline at end of file diff --git a/enginecustom/object.h b/enginecustom/object.h index 5f63163..bb98a8b 100644 --- a/enginecustom/object.h +++ b/enginecustom/object.h @@ -29,6 +29,10 @@ public: void SetVelocity(XMVECTOR); XMVECTOR GetVelocity(); + void SetAcceleration(XMVECTOR); + XMVECTOR GetAcceleration(); + void SetMass(float); + float GetMass(); void UpdateWorldMatrix(); void UpdateSRMatrix(); @@ -53,5 +57,8 @@ private: XMMATRIX m_srMatrix; XMMATRIX m_worldMatrix; + XMVECTOR m_acceleration; + float m_mass; + std::string m_name; }; diff --git a/enginecustom/physics.cpp b/enginecustom/physics.cpp index cc7561d..a7f6648 100644 --- a/enginecustom/physics.cpp +++ b/enginecustom/physics.cpp @@ -29,34 +29,63 @@ void Physics::SetGravity(XMVECTOR gravity) // Apply gravity to an object void Physics::ApplyGravity(Object* object, float frameTime) { - if (object == nullptr) // Verify if the object is not null - { - return; - } + if (object == nullptr) // Verify if the object is not null + { + return; + } - // Get the object velocity - XMVECTOR velocity = object->GetVelocity(); + // Calculate the acceleration caused by gravity + XMVECTOR gravityAcceleration = m_gravity / object->GetMass(); - // Update the velocity with gravity - velocity += m_gravity * frameTime; + // Add the gravity acceleration to the object's current acceleration + object->SetAcceleration(object->GetAcceleration() + gravityAcceleration); - // Set the new velocity - object->SetVelocity(velocity); + // Get the object velocity + XMVECTOR velocity = object->GetVelocity(); + + // Update the velocity with the object's acceleration + velocity += object->GetAcceleration() * frameTime; + + // Set the new velocity + object->SetVelocity(velocity); } void Physics::ApplyDrag(Object* object, float dragValue, float frameTime) +{ + if (object == nullptr) // Verify if the object is not null + { + return; + } + + // Calculate the acceleration caused by drag + XMVECTOR dragAcceleration = -object->GetVelocity() * dragValue / object->GetMass(); + + // Add the drag acceleration to the object's current acceleration + object->SetAcceleration(object->GetAcceleration() + dragAcceleration); + + // Get the velocity of the object + XMVECTOR velocity = object->GetVelocity(); + + // Update the velocity with the object's acceleration + velocity += object->GetAcceleration() * frameTime; + + // Set the new velocity + object->SetVelocity(velocity); +} + +void Physics::ApplyForce(Object* object, XMVECTOR force) { if (object == nullptr) // Verify if the object is not null { return; } - // Get the velocity of the object - XMVECTOR velocity = object->GetVelocity(); + // Get the mass of the object + float mass = object->GetMass(); - // Calculate the new velocity - XMVECTOR newVelocity = velocity - (velocity * dragValue * frameTime); + // Calculate the acceleration caused by the force + XMVECTOR acceleration = force / mass; - // Update the velocity of the object - object->SetVelocity(newVelocity); + // Add the acceleration to the object's current acceleration + object->SetAcceleration(object->GetAcceleration() + acceleration); } \ No newline at end of file diff --git a/enginecustom/physics.h b/enginecustom/physics.h index 1a2893d..58445c3 100644 --- a/enginecustom/physics.h +++ b/enginecustom/physics.h @@ -14,6 +14,7 @@ public: void SetGravity(XMVECTOR gravity); // Define the gravity value void ApplyGravity(Object*, float); // Apply gravity to an object void ApplyDrag(Object*, float, float); + void ApplyForce(Object*, XMVECTOR); private: XMVECTOR m_gravity; From d0d655781eac445c5e503580b4c4f175e1ba87f3 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Fri, 12 Apr 2024 15:07:30 +0200 Subject: [PATCH 06/19] Ajout : scroll sur la camera feat: + scroll fait bouger la camera en avant ou en arriere + scroll et clic droit, augmente ou diminue la vitesse de la camera --- enginecustom/Positionclass.cpp | 38 +++++++++++++++++++++++++++---- enginecustom/Positionclass.h | 4 ++-- enginecustom/applicationclass.cpp | 7 ++++-- enginecustom/imgui.ini | 2 +- enginecustom/inputclass.cpp | 20 ++++++++++++++++ enginecustom/inputclass.h | 2 ++ 6 files changed, 64 insertions(+), 9 deletions(-) diff --git a/enginecustom/Positionclass.cpp b/enginecustom/Positionclass.cpp index cf05768..c3c1877 100644 --- a/enginecustom/Positionclass.cpp +++ b/enginecustom/Positionclass.cpp @@ -10,6 +10,7 @@ PositionClass::PositionClass() m_positionZ = 0.0f; m_leftTurnSpeed = 0.0f; m_rightTurnSpeed = 0.0f; + m_cameraSpeed = 4.0f; } @@ -144,13 +145,24 @@ void PositionClass::TurnMouse(float deltaX, float deltaY, bool rightMouseDown) return; } -void PositionClass::MoveCamera(bool forward, bool backward, bool left, bool right, bool up, bool down) +void PositionClass::MoveCamera(bool forward, bool backward, bool left, bool right, bool up, bool down, bool scrollUp, bool scrollDown, bool rightClick) { - float radiansY, radiansX; - float speed; + float radiansY, radiansX, speed; // Set the speed of the camera. - speed = 2.0f * m_frameTime; + if (scrollUp && rightClick) + { + m_cameraSpeed *= 1.1f; + } + if (scrollDown && rightClick) + { + m_cameraSpeed *= 0.9f; + + if (m_cameraSpeed < 0.25f) + { + m_cameraSpeed = 0.25f; + } + } // Convert degrees to radians. radiansY = m_rotationY * 0.0174532925f; @@ -158,6 +170,24 @@ void PositionClass::MoveCamera(bool forward, bool backward, bool left, bool righ // Update the position. + if (scrollUp && !rightClick) + { + speed = m_cameraSpeed * 20 * m_frameTime; + m_positionX += sinf(radiansY) * cosf(radiansX) * speed; + m_positionZ += cosf(radiansY) * cosf(radiansX) * speed; + m_positionY -= sinf(radiansX) * speed; + } + + speed = m_cameraSpeed * m_frameTime; + + if (scrollDown && !rightClick) + { + speed = m_cameraSpeed * 20 * m_frameTime; + m_positionX -= sinf(radiansY) * cosf(radiansX) * speed; + m_positionZ -= cosf(radiansY) * cosf(radiansX) * speed; + m_positionY += sinf(radiansX) * speed; + } + // If moving forward, the position moves in the direction of the camera and accordingly to its angle. if (forward) { diff --git a/enginecustom/Positionclass.h b/enginecustom/Positionclass.h index 7123aca..0d73ca3 100644 --- a/enginecustom/Positionclass.h +++ b/enginecustom/Positionclass.h @@ -25,13 +25,13 @@ public: void TurnLeft(bool); void TurnRight(bool); void TurnMouse(float, float, bool); - void MoveCamera(bool, bool, bool, bool, bool, bool); + void MoveCamera(bool, bool, bool, bool, bool, bool, bool, bool, bool); private: float m_frameTime; float m_rotationY, m_rotationX; float m_positionX, m_positionY, m_positionZ; - float m_leftTurnSpeed, m_rightTurnSpeed, m_horizontalTurnSpeed, m_verticalTurnSpeed; + float m_leftTurnSpeed, m_rightTurnSpeed, m_horizontalTurnSpeed, m_verticalTurnSpeed, m_cameraSpeed; }; #endif \ No newline at end of file diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index d9b699c..35ef870 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -628,7 +628,7 @@ void ApplicationClass::Shutdown() bool ApplicationClass::Frame(InputClass* Input) { int mouseX, mouseY, currentMouseX, currentMouseY; - bool result, leftMouseDown, rightMouseDown, keyLeft, keyRight, keyUp, keyDown, buttonQ, buttonD, buttonZ, buttonS, buttonA, buttonE; + bool result, leftMouseDown, rightMouseDown, keyLeft, keyRight, keyUp, keyDown, buttonQ, buttonD, buttonZ, buttonS, buttonA, buttonE, scrollUp, scrollDown; float rotationY, rotationX, positionX, positionY, positionZ; float frameTime; @@ -684,6 +684,9 @@ bool ApplicationClass::Frame(InputClass* Input) // Get the current view point rotation. m_Position->GetRotation(rotationY, rotationX); + scrollUp = Input->IsScrollUp(); + scrollDown = Input->IsScrollDown(); + // Check if the a(q), d, w(z), s, q(a), e have been pressed, if so move the camera accordingly. buttonQ = Input->IsAPressed(); buttonD = Input->IsDPressed(); @@ -691,7 +694,7 @@ bool ApplicationClass::Frame(InputClass* Input) buttonS = Input->IsSPressed(); buttonA = Input->IsQPressed(); buttonE = Input->IsEPressed(); - m_Position->MoveCamera(buttonZ, buttonS, buttonQ, buttonD, buttonE, buttonA); + m_Position->MoveCamera(buttonZ, buttonS, buttonQ, buttonD, buttonE, buttonA, scrollUp, scrollDown, rightMouseDown); m_Position->GetPosition(positionX, positionY, positionZ); // Set the postion and rotation of the camera. diff --git a/enginecustom/imgui.ini b/enginecustom/imgui.ini index 771a0fe..d7295bb 100644 --- a/enginecustom/imgui.ini +++ b/enginecustom/imgui.ini @@ -3,7 +3,7 @@ Pos=60,60 Size=400,400 [Window][Khaotic Engine] -Pos=596,31 +Pos=593,31 Size=694,210 [Window][Objects] diff --git a/enginecustom/inputclass.cpp b/enginecustom/inputclass.cpp index 27840ea..599bcac 100644 --- a/enginecustom/inputclass.cpp +++ b/enginecustom/inputclass.cpp @@ -392,3 +392,23 @@ bool InputClass::IsRightMousePressed() return false; } + +bool InputClass::IsScrollUp() +{ + if (m_mouseState.lZ > 0) + { + return true; + } + + return false; +} + +bool InputClass::IsScrollDown() +{ + if (m_mouseState.lZ < 0) + { + return true; + } + + return false; +} diff --git a/enginecustom/inputclass.h b/enginecustom/inputclass.h index 4354212..e3581bd 100644 --- a/enginecustom/inputclass.h +++ b/enginecustom/inputclass.h @@ -39,6 +39,8 @@ public: void KeyUp(unsigned int); bool IsLeftArrowPressed(); bool IsRightArrowPressed(); + bool IsScrollUp(); + bool IsScrollDown(); bool IsUpArrowPressed(); bool IsDownArrowPressed(); bool IsAPressed(); From c9e8b5b9b84f299a7776e47fedfc6020caeb770f Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Fri, 12 Apr 2024 15:29:58 +0200 Subject: [PATCH 07/19] Modification scroll, fonctions en const MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: + vitesse scroll et scroll et clic droit indépendantes refactor: + ajout de const sur certaines fonctions --- enginecustom/Cameraclass.cpp | 4 ++-- enginecustom/Cameraclass.h | 4 ++-- enginecustom/Positionclass.cpp | 14 ++++++++------ enginecustom/Positionclass.h | 6 +++--- enginecustom/inputclass.cpp | 34 +++++++++++++++++----------------- enginecustom/inputclass.h | 34 +++++++++++++++++----------------- enginecustom/object.cpp | 16 ++++++++-------- enginecustom/object.h | 16 ++++++++-------- enginecustom/physics.cpp | 2 +- enginecustom/physics.h | 2 +- 10 files changed, 67 insertions(+), 65 deletions(-) diff --git a/enginecustom/Cameraclass.cpp b/enginecustom/Cameraclass.cpp index b76598a..1160ad6 100644 --- a/enginecustom/Cameraclass.cpp +++ b/enginecustom/Cameraclass.cpp @@ -105,7 +105,7 @@ void CameraClass::Render() return; } -XMMATRIX CameraClass::GetViewMatrix(XMMATRIX& viewMatrix) +XMMATRIX CameraClass::GetViewMatrix(XMMATRIX& viewMatrix) const { viewMatrix = m_viewMatrix; return viewMatrix; @@ -164,7 +164,7 @@ void CameraClass::RenderReflection(float height) return; } -void CameraClass::GetReflectionViewMatrix(XMMATRIX& reflectionViewMatrix) +void CameraClass::GetReflectionViewMatrix(XMMATRIX& reflectionViewMatrix) const { reflectionViewMatrix = m_reflectionViewMatrix; return; diff --git a/enginecustom/Cameraclass.h b/enginecustom/Cameraclass.h index fe41bdd..0f344e9 100644 --- a/enginecustom/Cameraclass.h +++ b/enginecustom/Cameraclass.h @@ -30,10 +30,10 @@ public: void Render(); - XMMATRIX GetViewMatrix(XMMATRIX& viewMatrix); + XMMATRIX GetViewMatrix(XMMATRIX& viewMatrix) const; void RenderReflection(float); - void GetReflectionViewMatrix(XMMATRIX&); + void GetReflectionViewMatrix(XMMATRIX&) const; private: float m_positionX, m_positionY, m_positionZ; diff --git a/enginecustom/Positionclass.cpp b/enginecustom/Positionclass.cpp index c3c1877..19008d8 100644 --- a/enginecustom/Positionclass.cpp +++ b/enginecustom/Positionclass.cpp @@ -11,6 +11,7 @@ PositionClass::PositionClass() m_leftTurnSpeed = 0.0f; m_rightTurnSpeed = 0.0f; m_cameraSpeed = 4.0f; + m_speed = m_cameraSpeed; } @@ -29,14 +30,14 @@ void PositionClass::SetFrameTime(float time) return; } -void PositionClass::GetRotation(float& y, float& x) +void PositionClass::GetRotation(float& y, float& x) const { y = m_rotationY; x = m_rotationX; return; } -void PositionClass::GetPosition(float& x, float& y, float& z) +void PositionClass::GetPosition(float& x, float& y, float& z) const { x = m_positionX; y = m_positionY; @@ -172,22 +173,23 @@ void PositionClass::MoveCamera(bool forward, bool backward, bool left, bool righ if (scrollUp && !rightClick) { - speed = m_cameraSpeed * 20 * m_frameTime; + speed = m_speed * 20 * m_frameTime; m_positionX += sinf(radiansY) * cosf(radiansX) * speed; m_positionZ += cosf(radiansY) * cosf(radiansX) * speed; m_positionY -= sinf(radiansX) * speed; } - speed = m_cameraSpeed * m_frameTime; - if (scrollDown && !rightClick) { - speed = m_cameraSpeed * 20 * m_frameTime; + speed = m_speed * 20 * m_frameTime; m_positionX -= sinf(radiansY) * cosf(radiansX) * speed; m_positionZ -= cosf(radiansY) * cosf(radiansX) * speed; m_positionY += sinf(radiansX) * speed; } + + speed = m_cameraSpeed * m_frameTime; + // If moving forward, the position moves in the direction of the camera and accordingly to its angle. if (forward) { diff --git a/enginecustom/Positionclass.h b/enginecustom/Positionclass.h index 0d73ca3..cf1b0dc 100644 --- a/enginecustom/Positionclass.h +++ b/enginecustom/Positionclass.h @@ -19,8 +19,8 @@ public: ~PositionClass(); void SetFrameTime(float); - void GetRotation(float&, float&); - void GetPosition(float&, float&, float&); + void GetRotation(float&, float&) const; + void GetPosition(float&, float&, float&) const; void TurnLeft(bool); void TurnRight(bool); @@ -31,7 +31,7 @@ private: float m_frameTime; float m_rotationY, m_rotationX; float m_positionX, m_positionY, m_positionZ; - float m_leftTurnSpeed, m_rightTurnSpeed, m_horizontalTurnSpeed, m_verticalTurnSpeed, m_cameraSpeed; + float m_leftTurnSpeed, m_rightTurnSpeed, m_horizontalTurnSpeed, m_verticalTurnSpeed, m_cameraSpeed, m_speed; }; #endif \ No newline at end of file diff --git a/enginecustom/inputclass.cpp b/enginecustom/inputclass.cpp index 599bcac..98e36fc 100644 --- a/enginecustom/inputclass.cpp +++ b/enginecustom/inputclass.cpp @@ -123,7 +123,7 @@ void InputClass::KeyUp(unsigned int input) } -bool InputClass::IsKeyDown(unsigned int key) +bool InputClass::IsKeyDown(unsigned int key) const { // Return what state the key is in (pressed/not pressed). return m_keys[key]; @@ -244,7 +244,7 @@ void InputClass::ProcessInput() return; } -bool InputClass::IsEscapePressed() +bool InputClass::IsEscapePressed() const { // Do a bitwise and on the keyboard state to check if the escape key is currently being pressed. if (m_keyboardState[DIK_ESCAPE] & 0x80) @@ -255,7 +255,7 @@ bool InputClass::IsEscapePressed() return false; } -bool InputClass::IsLeftArrowPressed() +bool InputClass::IsLeftArrowPressed() const { if (m_keyboardState[DIK_LEFT] & 0x80) { @@ -266,7 +266,7 @@ bool InputClass::IsLeftArrowPressed() } -bool InputClass::IsRightArrowPressed() +bool InputClass::IsRightArrowPressed() const { if (m_keyboardState[DIK_RIGHT] & 0x80) { @@ -276,7 +276,7 @@ bool InputClass::IsRightArrowPressed() return false; } -bool InputClass::IsUpArrowPressed() +bool InputClass::IsUpArrowPressed() const { if (m_keyboardState[DIK_UP] & 0x80) { @@ -287,7 +287,7 @@ bool InputClass::IsUpArrowPressed() } -bool InputClass::IsDownArrowPressed() +bool InputClass::IsDownArrowPressed() const { if (m_keyboardState[DIK_DOWN] & 0x80) { @@ -301,7 +301,7 @@ bool InputClass::IsDownArrowPressed() // Les touches correspondent aux claviers QWERTY // /////////////////////////////////////////////////// -bool InputClass::IsAPressed() +bool InputClass::IsAPressed() const { // Touche A sur QWERTY, Q sur AZERTY if (m_keyboardState[DIK_A] & 0x80) @@ -312,7 +312,7 @@ bool InputClass::IsAPressed() return false; } -bool InputClass::IsDPressed() +bool InputClass::IsDPressed() const { if (m_keyboardState[DIK_D] & 0x80) { @@ -322,7 +322,7 @@ bool InputClass::IsDPressed() return false; } -bool InputClass::IsWPressed() +bool InputClass::IsWPressed() const { // Touche W sur QWERTY, Z sur AZERTY if (m_keyboardState[DIK_W] & 0x80) @@ -333,7 +333,7 @@ bool InputClass::IsWPressed() return false; } -bool InputClass::IsSPressed() +bool InputClass::IsSPressed() const { if (m_keyboardState[DIK_S] & 0x80) { @@ -343,7 +343,7 @@ bool InputClass::IsSPressed() return false; } -bool InputClass::IsQPressed() +bool InputClass::IsQPressed() const { // Touche Q sur QWERTY, A sur AZERTY if (m_keyboardState[DIK_Q] & 0x80) @@ -354,7 +354,7 @@ bool InputClass::IsQPressed() return false; } -bool InputClass::IsEPressed() +bool InputClass::IsEPressed() const { if (m_keyboardState[DIK_E] & 0x80) { @@ -364,14 +364,14 @@ bool InputClass::IsEPressed() return false; } -void InputClass::GetMouseLocation(int& mouseX, int& mouseY) +void InputClass::GetMouseLocation(int& mouseX, int& mouseY) const { mouseX = m_mouseX; mouseY = m_mouseY; return; } -bool InputClass::IsLeftMousePressed() +bool InputClass::IsLeftMousePressed() const { // Check the left mouse button state. if (m_mouseState.rgbButtons[0] & 0x80) @@ -382,7 +382,7 @@ bool InputClass::IsLeftMousePressed() return false; } -bool InputClass::IsRightMousePressed() +bool InputClass::IsRightMousePressed() const { // Check the left mouse button state. if (m_mouseState.rgbButtons[1] & 0x80) @@ -393,7 +393,7 @@ bool InputClass::IsRightMousePressed() return false; } -bool InputClass::IsScrollUp() +bool InputClass::IsScrollUp() const { if (m_mouseState.lZ > 0) { @@ -403,7 +403,7 @@ bool InputClass::IsScrollUp() return false; } -bool InputClass::IsScrollDown() +bool InputClass::IsScrollDown() const { if (m_mouseState.lZ < 0) { diff --git a/enginecustom/inputclass.h b/enginecustom/inputclass.h index e3581bd..444e51a 100644 --- a/enginecustom/inputclass.h +++ b/enginecustom/inputclass.h @@ -31,26 +31,26 @@ public: void Shutdown(); bool Frame(); - bool IsEscapePressed(); - void GetMouseLocation(int&, int&); - bool IsLeftMousePressed(); - bool IsRightMousePressed(); + bool IsEscapePressed() const; + void GetMouseLocation(int&, int&) const; + bool IsLeftMousePressed() const; + bool IsRightMousePressed() const; void KeyDown(unsigned int); void KeyUp(unsigned int); - bool IsLeftArrowPressed(); - bool IsRightArrowPressed(); - bool IsScrollUp(); - bool IsScrollDown(); - bool IsUpArrowPressed(); - bool IsDownArrowPressed(); - bool IsAPressed(); - bool IsDPressed(); - bool IsWPressed(); - bool IsSPressed(); - bool IsQPressed(); - bool IsEPressed(); + bool IsLeftArrowPressed() const; + bool IsRightArrowPressed() const; + bool IsScrollUp() const; + bool IsScrollDown() const; + bool IsUpArrowPressed() const; + bool IsDownArrowPressed() const; + bool IsAPressed() const; + bool IsDPressed() const; + bool IsWPressed() const; + bool IsSPressed() const; + bool IsQPressed() const; + bool IsEPressed()const; - bool IsKeyDown(unsigned int); + bool IsKeyDown(unsigned int) const; private: bool m_keys[256]; diff --git a/enginecustom/object.cpp b/enginecustom/object.cpp index 1ae2f60..2c37036 100644 --- a/enginecustom/object.cpp +++ b/enginecustom/object.cpp @@ -42,27 +42,27 @@ void Object::SetWorldMatrix(XMMATRIX worldMatrix) m_worldMatrix = worldMatrix; } -XMMATRIX Object::GetScaleMatrix() +XMMATRIX Object::GetScaleMatrix() const { return m_scaleMatrix; } -XMMATRIX Object::GetRotateMatrix() +XMMATRIX Object::GetRotateMatrix() const { return m_rotateMatrix; } -XMMATRIX Object::GetTranslateMatrix() +XMMATRIX Object::GetTranslateMatrix() const { return m_translateMatrix; } -XMMATRIX Object::GetSRMatrix() +XMMATRIX Object::GetSRMatrix() const { return m_srMatrix; } -XMMATRIX Object::GetWorldMatrix() +XMMATRIX Object::GetWorldMatrix() const { return m_worldMatrix; } @@ -172,7 +172,7 @@ void Object::SetVelocity(XMVECTOR velocity) m_velocity = velocity; } -XMVECTOR Object::GetVelocity() +XMVECTOR Object::GetVelocity() const { return m_velocity; } @@ -182,7 +182,7 @@ void Object::SetAcceleration(XMVECTOR acceleration) m_acceleration = acceleration; } -XMVECTOR Object::GetAcceleration() +XMVECTOR Object::GetAcceleration() const { return m_acceleration; } @@ -192,7 +192,7 @@ void Object::SetMass(float mass) m_mass = mass; } -float Object::GetMass() +float Object::GetMass() const { return m_mass; } \ No newline at end of file diff --git a/enginecustom/object.h b/enginecustom/object.h index bb98a8b..5eb6407 100644 --- a/enginecustom/object.h +++ b/enginecustom/object.h @@ -17,22 +17,22 @@ public: void SetRotation(XMVECTOR rotation); void SetScale(XMVECTOR scale); - XMMATRIX GetScaleMatrix(); - XMMATRIX GetRotateMatrix(); - XMMATRIX GetTranslateMatrix(); - XMMATRIX GetSRMatrix(); - XMMATRIX GetWorldMatrix(); + XMMATRIX GetScaleMatrix() const; + XMMATRIX GetRotateMatrix() const; + XMMATRIX GetTranslateMatrix() const; + XMMATRIX GetSRMatrix() const; + XMMATRIX GetWorldMatrix() const; XMVECTOR GetPosition(); XMVECTOR GetRotation(); XMVECTOR GetScale(); void SetVelocity(XMVECTOR); - XMVECTOR GetVelocity(); + XMVECTOR GetVelocity() const; void SetAcceleration(XMVECTOR); - XMVECTOR GetAcceleration(); + XMVECTOR GetAcceleration() const; void SetMass(float); - float GetMass(); + float GetMass() const; void UpdateWorldMatrix(); void UpdateSRMatrix(); diff --git a/enginecustom/physics.cpp b/enginecustom/physics.cpp index a7f6648..a73aad2 100644 --- a/enginecustom/physics.cpp +++ b/enginecustom/physics.cpp @@ -15,7 +15,7 @@ Physics::~Physics() } // Get the gravity value -XMVECTOR Physics::GetGravity() +XMVECTOR Physics::GetGravity() const { return m_gravity; } diff --git a/enginecustom/physics.h b/enginecustom/physics.h index 58445c3..5307551 100644 --- a/enginecustom/physics.h +++ b/enginecustom/physics.h @@ -10,7 +10,7 @@ public: explicit Physics(const Physics&); // Use explicit to avoid implicit conversion ~Physics(); - XMVECTOR GetGravity(); // Get the gravity value + XMVECTOR GetGravity() const; // Get the gravity value void SetGravity(XMVECTOR gravity); // Define the gravity value void ApplyGravity(Object*, float); // Apply gravity to an object void ApplyDrag(Object*, float, float); From 23da293d542edc680ae70eedaf17baab146c2a66 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Fri, 12 Apr 2024 15:44:59 +0200 Subject: [PATCH 08/19] Ajout commentaires + modifications legeres docs: + ajout de commentaires dans Positionclass refactor: + changement dans la fonction du mouvement de la camera --- enginecustom/Positionclass.cpp | 22 ++++++++++++++-------- enginecustom/Positionclass.h | 2 +- enginecustom/applicationclass.cpp | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/enginecustom/Positionclass.cpp b/enginecustom/Positionclass.cpp index 19008d8..b94c2da 100644 --- a/enginecustom/Positionclass.cpp +++ b/enginecustom/Positionclass.cpp @@ -10,6 +10,9 @@ PositionClass::PositionClass() m_positionZ = 0.0f; m_leftTurnSpeed = 0.0f; m_rightTurnSpeed = 0.0f; + m_horizontalTurnSpeed = 0.0f; + m_verticalTurnSpeed = 0.0f; + m_verticalTurnSpeed = 0.0f; m_cameraSpeed = 4.0f; m_speed = m_cameraSpeed; } @@ -110,11 +113,10 @@ void PositionClass::TurnRight(bool keydown) return; } -void PositionClass::TurnMouse(float deltaX, float deltaY, bool rightMouseDown) +void PositionClass::TurnMouse(float deltaX, float deltaY, float sensitivity, bool rightMouseDown) { - float speed = 0.1f; // The turning speed is proportional to the horizontal mouse movement - m_horizontalTurnSpeed = deltaX * speed; + m_horizontalTurnSpeed = deltaX * sensitivity; if (rightMouseDown) { @@ -130,7 +132,7 @@ void PositionClass::TurnMouse(float deltaX, float deltaY, bool rightMouseDown) } // The turning speed is proportional to the vertical mouse movement - m_verticalTurnSpeed = deltaY * speed; + m_verticalTurnSpeed = deltaY * sensitivity; // Update the rotation using the turning speed m_rotationX += m_verticalTurnSpeed; @@ -150,7 +152,7 @@ void PositionClass::MoveCamera(bool forward, bool backward, bool left, bool righ { float radiansY, radiansX, speed; - // Set the speed of the camera. + // Set the speed of the camera if the right click is down. if (scrollUp && rightClick) { m_cameraSpeed *= 1.1f; @@ -159,7 +161,7 @@ void PositionClass::MoveCamera(bool forward, bool backward, bool left, bool righ { m_cameraSpeed *= 0.9f; - if (m_cameraSpeed < 0.25f) + if (m_cameraSpeed < 0.25f) // Minimum speed. { m_cameraSpeed = 0.25f; } @@ -169,8 +171,11 @@ void PositionClass::MoveCamera(bool forward, bool backward, bool left, bool righ radiansY = m_rotationY * 0.0174532925f; radiansX = m_rotationX * 0.0174532925f; - // Update the position. + ////////////////////////// + // Update the position. // + ////////////////////////// + // Moves the camera forward on a greater scale than the arrows. if (scrollUp && !rightClick) { speed = m_speed * 20 * m_frameTime; @@ -179,6 +184,7 @@ void PositionClass::MoveCamera(bool forward, bool backward, bool left, bool righ m_positionY -= sinf(radiansX) * speed; } + // Moves the camera backward on a greater scale than the arrows. if (scrollDown && !rightClick) { speed = m_speed * 20 * m_frameTime; @@ -187,7 +193,7 @@ void PositionClass::MoveCamera(bool forward, bool backward, bool left, bool righ m_positionY += sinf(radiansX) * speed; } - + // Set the speed of the camera. speed = m_cameraSpeed * m_frameTime; // If moving forward, the position moves in the direction of the camera and accordingly to its angle. diff --git a/enginecustom/Positionclass.h b/enginecustom/Positionclass.h index cf1b0dc..8e1fbc8 100644 --- a/enginecustom/Positionclass.h +++ b/enginecustom/Positionclass.h @@ -24,7 +24,7 @@ public: void TurnLeft(bool); void TurnRight(bool); - void TurnMouse(float, float, bool); + void TurnMouse(float, float, float, bool); void MoveCamera(bool, bool, bool, bool, bool, bool, bool, bool, bool); private: diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index 35ef870..b011e0c 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -679,7 +679,7 @@ bool ApplicationClass::Frame(InputClass* Input) //keyDown = Input->IsRightArrowPressed(); //m_Position->TurnRight(keyDown); - m_Position->TurnMouse(deltaX, deltaY, rightMouseDown); + m_Position->TurnMouse(deltaX, deltaY, 0.1f, rightMouseDown); // Get the current view point rotation. m_Position->GetRotation(rotationY, rotationX); From d51619f437820f33fd069705283624fb2e1deb51 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Mon, 22 Apr 2024 14:50:14 +0200 Subject: [PATCH 09/19] fix du spawn d'un objet fix: + les objets ne spawn plus a une distance elevees --- enginecustom/applicationclass.cpp | 12 +++++++----- enginecustom/imgui.ini | 2 +- enginecustom/object.cpp | 2 +- enginecustom/physics.cpp | 3 ++- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index b011e0c..00bf8b9 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -744,8 +744,7 @@ bool ApplicationClass::Frame(InputClass* Input) object->SetAcceleration(XMVectorZero()); // Apply forces - m_Physics->ApplyGravity(object, frameTime); - m_Physics->ApplyDrag(object, 1.0f, frameTime); + float forceX = 0, forceY = 0, forceZ = 0, forceW = 0; @@ -779,11 +778,14 @@ bool ApplicationClass::Frame(InputClass* Input) position = position + velocity * frameTime; object->SetPosition(position); - // Check if the object has fallen below the ground - if (XMVectorGetY(object->GetPosition()) < -10.0f) + m_Physics->ApplyGravity(object, frameTime); + m_Physics->ApplyDrag(object, 1.0f, frameTime); + + // Check if the object has fallen below a certain position + if (XMVectorGetY(object->GetPosition()) < -30.0f) { XMVECTOR currentPosition = object->GetPosition(); // Obtain the current position of the object - object->SetPosition(XMVectorSetY(currentPosition, 20.0f)); // Define the new position of the object + object->SetPosition(XMVectorSetY(currentPosition, 50.0f)); // Define the new position of the object } object->m_previousPosition = object->GetPosition(); diff --git a/enginecustom/imgui.ini b/enginecustom/imgui.ini index d7295bb..da1de71 100644 --- a/enginecustom/imgui.ini +++ b/enginecustom/imgui.ini @@ -7,7 +7,7 @@ Pos=593,31 Size=694,210 [Window][Objects] -Pos=87,45 +Pos=81,40 Size=492,353 [Window][Terrain] diff --git a/enginecustom/object.cpp b/enginecustom/object.cpp index 2c37036..a721a31 100644 --- a/enginecustom/object.cpp +++ b/enginecustom/object.cpp @@ -10,7 +10,7 @@ Object::Object() : ModelClass() m_previousPosition = XMVectorZero(); m_velocity = XMVectorZero(); m_acceleration = XMVectorZero(); - m_mass = 1.0f; + m_mass = NULL; } Object::~Object() diff --git a/enginecustom/physics.cpp b/enginecustom/physics.cpp index a73aad2..0fc2d46 100644 --- a/enginecustom/physics.cpp +++ b/enginecustom/physics.cpp @@ -1,8 +1,9 @@ #include "physics.h" -Physics::Physics() : m_gravity(XMVectorSet(0.0f, -9.81f, 0.0f, 0.0f)) // Initialize the gravity vector +Physics::Physics() { + m_gravity = XMVectorSet(0.0f, -9.81f, 0.0f, 0.0f); // Initialize the gravity vector } Physics::Physics(const Physics& other) From 4a77df61024a6f875c7235e74a245e8c97b7faef Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Mon, 22 Apr 2024 16:14:05 +0200 Subject: [PATCH 10/19] fix du probleme de spawn d'objets fix: + les objets ne s'envolent plus vers le haut quand un nouvel objet est spawn --- enginecustom/applicationclass.cpp | 11 +++++------ enginecustom/imgui.ini | 6 +++--- enginecustom/physics.cpp | 21 ++------------------- enginecustom/physics.h | 3 +-- 4 files changed, 11 insertions(+), 30 deletions(-) diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index 00bf8b9..5010ea6 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -636,9 +636,9 @@ bool ApplicationClass::Frame(InputClass* Input) static int lastMouseX = 0, lastMouseY = 0; static float rotation = 360.0f; - static float x = 0.f; - static float y = 3.f; - static float z = 0.f; + static float x = 0.0f; + static float y = 3.0f; + static float z = 0.0f; // Update the system stats. m_Timer->Frame(); @@ -736,7 +736,7 @@ bool ApplicationClass::Frame(InputClass* Input) keyUp = Input->IsUpArrowPressed(); keyDown = Input->IsDownArrowPressed(); - for (auto object : m_object) + for (auto& object : m_object) { if (object != nullptr) // Check if the object is not null { @@ -778,8 +778,7 @@ bool ApplicationClass::Frame(InputClass* Input) position = position + velocity * frameTime; object->SetPosition(position); - m_Physics->ApplyGravity(object, frameTime); - m_Physics->ApplyDrag(object, 1.0f, frameTime); + m_Physics->ApplyGravity(object, 1.0f, frameTime); // Check if the object has fallen below a certain position if (XMVectorGetY(object->GetPosition()) < -30.0f) diff --git a/enginecustom/imgui.ini b/enginecustom/imgui.ini index da1de71..da5bd9e 100644 --- a/enginecustom/imgui.ini +++ b/enginecustom/imgui.ini @@ -3,14 +3,14 @@ Pos=60,60 Size=400,400 [Window][Khaotic Engine] -Pos=593,31 +Pos=29,636 Size=694,210 [Window][Objects] -Pos=81,40 +Pos=34,270 Size=492,353 [Window][Terrain] -Pos=1120,255 +Pos=755,731 Size=418,94 diff --git a/enginecustom/physics.cpp b/enginecustom/physics.cpp index 0fc2d46..bb5c182 100644 --- a/enginecustom/physics.cpp +++ b/enginecustom/physics.cpp @@ -28,7 +28,7 @@ void Physics::SetGravity(XMVECTOR gravity) } // Apply gravity to an object -void Physics::ApplyGravity(Object* object, float frameTime) +void Physics::ApplyGravity(Object* object, float dragValue, float frameTime) { if (object == nullptr) // Verify if the object is not null { @@ -41,30 +41,13 @@ void Physics::ApplyGravity(Object* object, float frameTime) // Add the gravity acceleration to the object's current acceleration object->SetAcceleration(object->GetAcceleration() + gravityAcceleration); - // Get the object velocity - XMVECTOR velocity = object->GetVelocity(); - - // Update the velocity with the object's acceleration - velocity += object->GetAcceleration() * frameTime; - - // Set the new velocity - object->SetVelocity(velocity); -} - -void Physics::ApplyDrag(Object* object, float dragValue, float frameTime) -{ - if (object == nullptr) // Verify if the object is not null - { - return; - } - // Calculate the acceleration caused by drag XMVECTOR dragAcceleration = -object->GetVelocity() * dragValue / object->GetMass(); // Add the drag acceleration to the object's current acceleration object->SetAcceleration(object->GetAcceleration() + dragAcceleration); - // Get the velocity of the object + // Get the object velocity XMVECTOR velocity = object->GetVelocity(); // Update the velocity with the object's acceleration diff --git a/enginecustom/physics.h b/enginecustom/physics.h index 5307551..0d774b0 100644 --- a/enginecustom/physics.h +++ b/enginecustom/physics.h @@ -12,8 +12,7 @@ public: XMVECTOR GetGravity() const; // Get the gravity value void SetGravity(XMVECTOR gravity); // Define the gravity value - void ApplyGravity(Object*, float); // Apply gravity to an object - void ApplyDrag(Object*, float, float); + void ApplyGravity(Object*, float, float); // Apply gravity to an object void ApplyForce(Object*, XMVECTOR); private: From fadca179e8da24f6afb3dbbc2efcbd67cf195b53 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Mon, 22 Apr 2024 17:26:27 +0200 Subject: [PATCH 11/19] Ajout collision avec le terrain, mais tres bancale feat: + les cubes ajoutes s'arretent lorsqu'il y a collision avec le terrain, seulement sur un seul chunk --- enginecustom/applicationclass.cpp | 44 ++++++++++++++++++++++--------- enginecustom/imgui.ini | 4 +-- enginecustom/object.cpp | 14 +++++++++- enginecustom/object.h | 3 +++ enginecustom/physics.cpp | 33 ++++++++++++++++++++++- enginecustom/physics.h | 1 + 6 files changed, 82 insertions(+), 17 deletions(-) diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index 5010ea6..1dcbc55 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -624,7 +624,6 @@ void ApplicationClass::Shutdown() } } - bool ApplicationClass::Frame(InputClass* Input) { int mouseX, mouseY, currentMouseX, currentMouseY; @@ -765,20 +764,39 @@ bool ApplicationClass::Frame(InputClass* Input) forceY = -40.0f; } - XMVECTOR force = XMVectorSet(forceX, forceY, forceZ, forceW); - m_Physics->ApplyForce(object, force); + bool isGrounded = object->GetGrounded(); - // Update velocity based on acceleration - XMVECTOR velocity = object->GetVelocity(); - velocity = velocity + object->GetAcceleration() * frameTime; - object->SetVelocity(velocity); + for (auto& chunk : m_terrainChunk) + { + if (m_Physics->IsColliding(object, chunk)) + { + isGrounded = true; + } + } + + if (!isGrounded) + { + XMVECTOR force = XMVectorSet(forceX, forceY, forceZ, forceW); + m_Physics->ApplyForce(object, force); + + // Update velocity based on acceleration + XMVECTOR velocity = object->GetVelocity(); + velocity = velocity + object->GetAcceleration() * frameTime; + object->SetVelocity(velocity); + + // Update position based on velocity + XMVECTOR position = object->GetPosition(); + position = position + velocity * frameTime; + object->SetPosition(position); + + m_Physics->ApplyGravity(object, 1.0f, frameTime); + } + else + { + object->SetVelocity(XMVectorZero()); + } - // Update position based on velocity - XMVECTOR position = object->GetPosition(); - position = position + velocity * frameTime; - object->SetPosition(position); - m_Physics->ApplyGravity(object, 1.0f, frameTime); // Check if the object has fallen below a certain position if (XMVectorGetY(object->GetPosition()) < -30.0f) @@ -1311,7 +1329,7 @@ void ApplicationClass::AddKobject(WCHAR* filepath) newObject->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), modelFilename, textureFilename, textureFilename2, textureFilename3); newObject->SetMass(1.0f); - newObject->SetTranslateMatrix(XMMatrixTranslation(0.0f, 0.0f, 0.0f)); + newObject->SetTranslateMatrix(XMMatrixTranslation(0.0f, 10.0f, 0.0f)); newObject->SetName(filename); m_object.push_back(newObject); diff --git a/enginecustom/imgui.ini b/enginecustom/imgui.ini index da5bd9e..b6c1376 100644 --- a/enginecustom/imgui.ini +++ b/enginecustom/imgui.ini @@ -3,11 +3,11 @@ Pos=60,60 Size=400,400 [Window][Khaotic Engine] -Pos=29,636 +Pos=27,634 Size=694,210 [Window][Objects] -Pos=34,270 +Pos=31,268 Size=492,353 [Window][Terrain] diff --git a/enginecustom/object.cpp b/enginecustom/object.cpp index a721a31..87ede9c 100644 --- a/enginecustom/object.cpp +++ b/enginecustom/object.cpp @@ -11,6 +11,7 @@ Object::Object() : ModelClass() m_velocity = XMVectorZero(); m_acceleration = XMVectorZero(); m_mass = NULL; + m_isGrounded = false; } Object::~Object() @@ -195,4 +196,15 @@ void Object::SetMass(float mass) float Object::GetMass() const { return m_mass; -} \ No newline at end of file +} + +void Object::SetGrounded(bool isGrounded) +{ + m_isGrounded = isGrounded; +} + +bool Object::GetGrounded() const +{ + return m_isGrounded; +} + diff --git a/enginecustom/object.h b/enginecustom/object.h index 5eb6407..2bf07e8 100644 --- a/enginecustom/object.h +++ b/enginecustom/object.h @@ -33,6 +33,8 @@ public: XMVECTOR GetAcceleration() const; void SetMass(float); float GetMass() const; + void SetGrounded(bool); + bool GetGrounded() const; void UpdateWorldMatrix(); void UpdateSRMatrix(); @@ -59,6 +61,7 @@ private: XMVECTOR m_acceleration; float m_mass; + bool m_isGrounded; std::string m_name; }; diff --git a/enginecustom/physics.cpp b/enginecustom/physics.cpp index bb5c182..6a4d289 100644 --- a/enginecustom/physics.cpp +++ b/enginecustom/physics.cpp @@ -72,4 +72,35 @@ void Physics::ApplyForce(Object* object, XMVECTOR force) // Add the acceleration to the object's current acceleration object->SetAcceleration(object->GetAcceleration() + acceleration); -} \ No newline at end of file +} + +bool Physics::IsColliding(Object* object1, Object* object2) +{ + + if (object1 == nullptr || object2 == nullptr) // Verify if the objects are not null + { + return false; + } + + // Get the positions of the two objects + XMVECTOR position1 = object1->GetPosition(); + XMVECTOR position2 = object2->GetPosition(); + + // Get the scale of the two objects (assuming the scale represents the size of the cube) + XMVECTOR scale1 = object1->GetScale(); + XMVECTOR scale2 = object2->GetScale(); + + // Calculate the min and max coordinates of the two cubes + XMVECTOR min1 = position1 - scale1 / 2.0f; + XMVECTOR max1 = position1 + scale1 / 2.0f; + XMVECTOR min2 = position2 - scale2 / 2.0f; + XMVECTOR max2 = position2 + scale2 / 2.0f; + + // Check if the two cubes overlap on all three axes + bool overlapX = max1.m128_f32[0] > min2.m128_f32[0] && min1.m128_f32[0] < max2.m128_f32[0]; + bool overlapY = max1.m128_f32[1] > min2.m128_f32[1] && min1.m128_f32[1] < max2.m128_f32[1]; + bool overlapZ = max1.m128_f32[2] > min2.m128_f32[2] && min1.m128_f32[2] < max2.m128_f32[2]; + + // If the cubes overlap on all three axes, they are colliding + return overlapX && overlapY && overlapZ; +} diff --git a/enginecustom/physics.h b/enginecustom/physics.h index 0d774b0..a23718b 100644 --- a/enginecustom/physics.h +++ b/enginecustom/physics.h @@ -14,6 +14,7 @@ public: void SetGravity(XMVECTOR gravity); // Define the gravity value void ApplyGravity(Object*, float, float); // Apply gravity to an object void ApplyForce(Object*, XMVECTOR); + bool IsColliding(Object*, Object*); private: XMVECTOR m_gravity; From e57de4f1bedde1b9ed954617a452ac1139429503 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Wed, 24 Apr 2024 11:59:48 +0200 Subject: [PATCH 12/19] Ajout de la collision entre 2 cubes feat: + collision entre 2 cubes refactor: + changements dans quelques fonctions + renommage de certaines fonctions --- enginecustom/applicationclass.cpp | 69 +++++++++++--------------- enginecustom/imgui.ini | 6 +-- enginecustom/object.cpp | 5 ++ enginecustom/object.h | 1 + enginecustom/physics.cpp | 82 +++++++++++++++++-------------- enginecustom/physics.h | 3 +- 6 files changed, 85 insertions(+), 81 deletions(-) diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index 1dcbc55..29abc16 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -742,9 +742,19 @@ bool ApplicationClass::Frame(InputClass* Input) // Reset acceleration for the new frame object->SetAcceleration(XMVectorZero()); + object->SetGrounded(false); + + for (auto& chunk : m_terrainChunk) + { + if (m_Physics->IsColliding(object, chunk)) + { + object->SetVelocity(XMVectorSetY(object->GetVelocity(), 0.0f)); + object->SetAcceleration(XMVectorSetY(object->GetAcceleration(), 0.0f)); + object->SetGrounded(true); + } + } + // Apply forces - - float forceX = 0, forceY = 0, forceZ = 0, forceW = 0; if (keyLeft) @@ -759,44 +769,23 @@ bool ApplicationClass::Frame(InputClass* Input) { forceY = 40.0f; } - if (keyDown) + if (keyDown && !object->GetGrounded()) { forceY = -40.0f; } - bool isGrounded = object->GetGrounded(); - - for (auto& chunk : m_terrainChunk) - { - if (m_Physics->IsColliding(object, chunk)) - { - isGrounded = true; - } - } - - if (!isGrounded) - { - XMVECTOR force = XMVectorSet(forceX, forceY, forceZ, forceW); - m_Physics->ApplyForce(object, force); - - // Update velocity based on acceleration - XMVECTOR velocity = object->GetVelocity(); - velocity = velocity + object->GetAcceleration() * frameTime; - object->SetVelocity(velocity); - - // Update position based on velocity - XMVECTOR position = object->GetPosition(); - position = position + velocity * frameTime; - object->SetPosition(position); - - m_Physics->ApplyGravity(object, 1.0f, frameTime); - } - else - { - object->SetVelocity(XMVectorZero()); - } + XMVECTOR force = XMVectorSet(forceX, forceY, forceZ, forceW); + m_Physics->AddForce(object, force); + // Update velocity based on acceleration + object->AddVelocity(frameTime); + // Update position based on velocity + XMVECTOR position = object->GetPosition(); + position = position + object->GetVelocity() * frameTime; + object->SetPosition(position); + + m_Physics->ApplyGravity(object, 1.0f, frameTime); // Check if the object has fallen below a certain position if (XMVectorGetY(object->GetPosition()) < -30.0f) @@ -940,7 +929,7 @@ bool ApplicationClass::Render(float rotation, float x, float y, float z) } } - for (auto object : m_object) + for (auto& object : m_object) { scaleMatrix = object->GetScaleMatrix(); if (object->m_demoSpinning) @@ -965,7 +954,7 @@ bool ApplicationClass::Render(float rotation, float x, float y, float z) } // Render terrain - for (auto chunk : m_terrainChunk) + for (auto& chunk : m_terrainChunk) { scaleMatrix = chunk->GetScaleMatrix(); @@ -1282,7 +1271,7 @@ void ApplicationClass::GenerateTerrain() scaleMatrix = XMMatrixScaling(scaleX, scaleY, scaleZ); // Set the file name of the model. - strcpy_s(modelFilename, "plane.txt"); + strcpy_s(modelFilename, "cube.txt"); strcpy_s(textureFilename, "stone01.tga"); strcpy_s(textureFilename2, "moss01.tga"); strcpy_s(textureFilename3, "alpha01.tga"); @@ -1297,7 +1286,9 @@ void ApplicationClass::GenerateTerrain() newTerrain->SetScaleMatrix(scaleMatrix); - newTerrain->SetTranslateMatrix(XMMatrixTranslation(i / 2 * (scaleX * 2), -5.0f, j * (scaleZ * 2))); + newTerrain->SetTranslateMatrix(XMMatrixTranslation(i / 2 * (scaleX * 2), -10.0f, j * (scaleZ * 2))); + + newTerrain->SetName("cube"); m_terrainChunk.push_back(newTerrain); @@ -1329,7 +1320,7 @@ void ApplicationClass::AddKobject(WCHAR* filepath) newObject->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), modelFilename, textureFilename, textureFilename2, textureFilename3); newObject->SetMass(1.0f); - newObject->SetTranslateMatrix(XMMatrixTranslation(0.0f, 10.0f, 0.0f)); + newObject->SetTranslateMatrix(XMMatrixTranslation(0.0f, 50.0f, 0.0f)); newObject->SetName(filename); m_object.push_back(newObject); diff --git a/enginecustom/imgui.ini b/enginecustom/imgui.ini index b6c1376..d762592 100644 --- a/enginecustom/imgui.ini +++ b/enginecustom/imgui.ini @@ -3,14 +3,14 @@ Pos=60,60 Size=400,400 [Window][Khaotic Engine] -Pos=27,634 +Pos=-1,652 Size=694,210 [Window][Objects] -Pos=31,268 +Pos=-1,299 Size=492,353 [Window][Terrain] -Pos=755,731 +Pos=692,769 Size=418,94 diff --git a/enginecustom/object.cpp b/enginecustom/object.cpp index 87ede9c..3d19f39 100644 --- a/enginecustom/object.cpp +++ b/enginecustom/object.cpp @@ -173,6 +173,11 @@ void Object::SetVelocity(XMVECTOR velocity) m_velocity = velocity; } +void Object::AddVelocity(float frameTime) +{ + m_velocity += m_acceleration * frameTime; +} + XMVECTOR Object::GetVelocity() const { return m_velocity; diff --git a/enginecustom/object.h b/enginecustom/object.h index 2bf07e8..e488087 100644 --- a/enginecustom/object.h +++ b/enginecustom/object.h @@ -28,6 +28,7 @@ public: XMVECTOR GetScale(); void SetVelocity(XMVECTOR); + void AddVelocity(float); XMVECTOR GetVelocity() const; void SetAcceleration(XMVECTOR); XMVECTOR GetAcceleration() const; diff --git a/enginecustom/physics.cpp b/enginecustom/physics.cpp index 6a4d289..940b2e3 100644 --- a/enginecustom/physics.cpp +++ b/enginecustom/physics.cpp @@ -35,29 +35,32 @@ void Physics::ApplyGravity(Object* object, float dragValue, float frameTime) return; } - // Calculate the acceleration caused by gravity - XMVECTOR gravityAcceleration = m_gravity / object->GetMass(); + if (!object->GetGrounded()) // Verify if the object is grounded + { + // Calculate the acceleration caused by gravity + XMVECTOR gravityAcceleration = m_gravity / object->GetMass(); - // Add the gravity acceleration to the object's current acceleration - object->SetAcceleration(object->GetAcceleration() + gravityAcceleration); + // Add the gravity acceleration to the object's current acceleration + object->SetAcceleration(object->GetAcceleration() + gravityAcceleration); - // Calculate the acceleration caused by drag - XMVECTOR dragAcceleration = -object->GetVelocity() * dragValue / object->GetMass(); + // Calculate the acceleration caused by drag + XMVECTOR dragAcceleration = -object->GetVelocity() * dragValue / object->GetMass(); - // Add the drag acceleration to the object's current acceleration - object->SetAcceleration(object->GetAcceleration() + dragAcceleration); + // Add the drag acceleration to the object's current acceleration + object->SetAcceleration(object->GetAcceleration() + dragAcceleration); - // Get the object velocity - XMVECTOR velocity = object->GetVelocity(); + // Get the object velocity + XMVECTOR velocity = object->GetVelocity(); - // Update the velocity with the object's acceleration - velocity += object->GetAcceleration() * frameTime; + // Update the velocity with the object's acceleration + velocity += object->GetAcceleration() * frameTime; - // Set the new velocity - object->SetVelocity(velocity); + // Set the new velocity + object->SetVelocity(velocity); + } } -void Physics::ApplyForce(Object* object, XMVECTOR force) +void Physics::AddForce(Object* object, XMVECTOR force) { if (object == nullptr) // Verify if the object is not null { @@ -77,30 +80,33 @@ void Physics::ApplyForce(Object* object, XMVECTOR force) bool Physics::IsColliding(Object* object1, Object* object2) { - if (object1 == nullptr || object2 == nullptr) // Verify if the objects are not null + std::string type1 = object1->GetName(); + std::string type2 = object2->GetName(); + + if (type1 == "cube" && type2 == "cube") { - return false; - } + return CubesOverlap(object1, object2); + } - // Get the positions of the two objects - XMVECTOR position1 = object1->GetPosition(); - XMVECTOR position2 = object2->GetPosition(); + // Add more collision checks for other types of objects here... - // Get the scale of the two objects (assuming the scale represents the size of the cube) - XMVECTOR scale1 = object1->GetScale(); - XMVECTOR scale2 = object2->GetScale(); - - // Calculate the min and max coordinates of the two cubes - XMVECTOR min1 = position1 - scale1 / 2.0f; - XMVECTOR max1 = position1 + scale1 / 2.0f; - XMVECTOR min2 = position2 - scale2 / 2.0f; - XMVECTOR max2 = position2 + scale2 / 2.0f; - - // Check if the two cubes overlap on all three axes - bool overlapX = max1.m128_f32[0] > min2.m128_f32[0] && min1.m128_f32[0] < max2.m128_f32[0]; - bool overlapY = max1.m128_f32[1] > min2.m128_f32[1] && min1.m128_f32[1] < max2.m128_f32[1]; - bool overlapZ = max1.m128_f32[2] > min2.m128_f32[2] && min1.m128_f32[2] < max2.m128_f32[2]; - - // If the cubes overlap on all three axes, they are colliding - return overlapX && overlapY && overlapZ; + return false; +} + +bool Physics::CubesOverlap(Object* cube1, Object* cube2) +{ + XMVECTOR position1 = cube1->GetPosition(); + XMVECTOR position2 = cube2->GetPosition(); + + XMVECTOR scale1 = cube1->GetScale(); + XMVECTOR scale2 = cube2->GetScale(); + + XMVECTOR min1 = position1 - scale1; + XMVECTOR max1 = position1 + scale1; + XMVECTOR min2 = position2 - scale2; + XMVECTOR max2 = position2 + scale2; + + return (min1.m128_f32[0] <= max2.m128_f32[0] && max1.m128_f32[0] >= min2.m128_f32[0] && + min1.m128_f32[1] <= max2.m128_f32[1] && max1.m128_f32[1] >= min2.m128_f32[1] && + min1.m128_f32[2] <= max2.m128_f32[2] && max1.m128_f32[2] >= min2.m128_f32[2]); } diff --git a/enginecustom/physics.h b/enginecustom/physics.h index a23718b..cbf0df0 100644 --- a/enginecustom/physics.h +++ b/enginecustom/physics.h @@ -13,8 +13,9 @@ public: XMVECTOR GetGravity() const; // Get the gravity value void SetGravity(XMVECTOR gravity); // Define the gravity value void ApplyGravity(Object*, float, float); // Apply gravity to an object - void ApplyForce(Object*, XMVECTOR); + void AddForce(Object*, XMVECTOR); bool IsColliding(Object*, Object*); + bool CubesOverlap(Object*, Object*); private: XMVECTOR m_gravity; From 291afe942420da5b13d555e6fe782f93802adf36 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Wed, 24 Apr 2024 12:59:40 +0200 Subject: [PATCH 13/19] Ajout collision semi fonctionnelle entre 2 spheres feat: + collision entre 2 spheres, fonctionne a moitie, overlap entre les 2 --- enginecustom/applicationclass.cpp | 16 +++++++++++----- enginecustom/imgui.ini | 2 +- enginecustom/physics.cpp | 26 ++++++++++++++++++++++++-- enginecustom/physics.h | 2 ++ 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index 29abc16..4b20a4b 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -748,8 +748,14 @@ bool ApplicationClass::Frame(InputClass* Input) { if (m_Physics->IsColliding(object, chunk)) { + + // Stop vertical movement, like gravity object->SetVelocity(XMVectorSetY(object->GetVelocity(), 0.0f)); object->SetAcceleration(XMVectorSetY(object->GetAcceleration(), 0.0f)); + + //// Stop movement in any direction + //object->SetVelocity(XMVectorZero()); + //object->SetAcceleration(XMVectorZero()); object->SetGrounded(true); } } @@ -1265,21 +1271,21 @@ void ApplicationClass::GenerateTerrain() int scaleX, scaleY, scaleZ; scaleX = 10.0f; - scaleY = 1.0f; + scaleY = 10.0f; scaleZ = 10.0f; scaleMatrix = XMMatrixScaling(scaleX, scaleY, scaleZ); // Set the file name of the model. - strcpy_s(modelFilename, "cube.txt"); + strcpy_s(modelFilename, "sphere.txt"); strcpy_s(textureFilename, "stone01.tga"); strcpy_s(textureFilename2, "moss01.tga"); strcpy_s(textureFilename3, "alpha01.tga"); // for loop to generate terrain chunks for a 10x10 grid - for (int i = 0; i < 10; i++) + for (int i = 0; i < 1; i++) { - for (int j = 0; j < 10; j++) + for (int j = 0; j < 1; j++) { Object* newTerrain = new Object(); newTerrain->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), modelFilename, textureFilename, textureFilename2, textureFilename3); @@ -1288,7 +1294,7 @@ void ApplicationClass::GenerateTerrain() newTerrain->SetTranslateMatrix(XMMatrixTranslation(i / 2 * (scaleX * 2), -10.0f, j * (scaleZ * 2))); - newTerrain->SetName("cube"); + newTerrain->SetName("sphere"); m_terrainChunk.push_back(newTerrain); diff --git a/enginecustom/imgui.ini b/enginecustom/imgui.ini index d762592..5912ed4 100644 --- a/enginecustom/imgui.ini +++ b/enginecustom/imgui.ini @@ -11,6 +11,6 @@ Pos=-1,299 Size=492,353 [Window][Terrain] -Pos=692,769 +Pos=692,768 Size=418,94 diff --git a/enginecustom/physics.cpp b/enginecustom/physics.cpp index 940b2e3..dc63360 100644 --- a/enginecustom/physics.cpp +++ b/enginecustom/physics.cpp @@ -87,8 +87,10 @@ bool Physics::IsColliding(Object* object1, Object* object2) { return CubesOverlap(object1, object2); } - - // Add more collision checks for other types of objects here... + if (type1 == "sphere" && type2 == "sphere") + { + return SpheresOverlap(object1, object2); + } return false; } @@ -110,3 +112,23 @@ bool Physics::CubesOverlap(Object* cube1, Object* cube2) min1.m128_f32[1] <= max2.m128_f32[1] && max1.m128_f32[1] >= min2.m128_f32[1] && min1.m128_f32[2] <= max2.m128_f32[2] && max1.m128_f32[2] >= min2.m128_f32[2]); } + +bool Physics::SpheresOverlap(Object* sphere1, Object* sphere2) +{ + XMVECTOR position1 = sphere1->GetPosition(); + XMVECTOR position2 = sphere2->GetPosition(); + + XMVECTOR scale1 = sphere1->GetScale(); + XMVECTOR scale2 = sphere2->GetScale(); + + float distance = sqrt( + (position1.m128_f32[0] - position2.m128_f32[0]) * (position1.m128_f32[0] - position2.m128_f32[0]) + + (position1.m128_f32[1] - position2.m128_f32[1]) * (position1.m128_f32[1] - position2.m128_f32[1]) + + (position1.m128_f32[2] - position2.m128_f32[2]) * (position1.m128_f32[2] - position2.m128_f32[2]) + ); + + float radius1 = XMVectorGetX(XMVector3Length(scale1)); + float radius2 = XMVectorGetX(XMVector3Length(scale2) / 2); + + return distance < radius1 + radius2; +} diff --git a/enginecustom/physics.h b/enginecustom/physics.h index cbf0df0..5a51a08 100644 --- a/enginecustom/physics.h +++ b/enginecustom/physics.h @@ -2,6 +2,7 @@ #define _PHYSICS_H_ #include "object.h" +#include "math.h" class Physics : public Object { @@ -16,6 +17,7 @@ public: void AddForce(Object*, XMVECTOR); bool IsColliding(Object*, Object*); bool CubesOverlap(Object*, Object*); + bool SpheresOverlap(Object*, Object*); private: XMVECTOR m_gravity; From 73e4a63de01a94a7f65fb95d5c6cc905e80812a7 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Thu, 25 Apr 2024 10:03:30 +0200 Subject: [PATCH 14/19] feat: Collision cube sphere feat: + Ajout des collisions entre une sphere et un cube bug: + Les collisions impliquant les spheres sont imparfaites, il y aura un fort clipping --- enginecustom/applicationclass.cpp | 9 ++++-- enginecustom/imgui.ini | 2 +- enginecustom/physics.cpp | 50 +++++++++++++++++++++++++++++-- enginecustom/physics.h | 1 + 4 files changed, 55 insertions(+), 7 deletions(-) diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index 4b20a4b..d2ab98a 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -1282,10 +1282,13 @@ void ApplicationClass::GenerateTerrain() strcpy_s(textureFilename2, "moss01.tga"); strcpy_s(textureFilename3, "alpha01.tga"); + std::filesystem::path p(modelFilename); + std::string filenameWithoutExtension = p.stem().string(); + // for loop to generate terrain chunks for a 10x10 grid - for (int i = 0; i < 1; i++) + for (int i = 0; i < 10; i++) { - for (int j = 0; j < 1; j++) + for (int j = 0; j < 10; j++) { Object* newTerrain = new Object(); newTerrain->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), modelFilename, textureFilename, textureFilename2, textureFilename3); @@ -1294,7 +1297,7 @@ void ApplicationClass::GenerateTerrain() newTerrain->SetTranslateMatrix(XMMatrixTranslation(i / 2 * (scaleX * 2), -10.0f, j * (scaleZ * 2))); - newTerrain->SetName("sphere"); + newTerrain->SetName(filenameWithoutExtension); m_terrainChunk.push_back(newTerrain); diff --git a/enginecustom/imgui.ini b/enginecustom/imgui.ini index 5912ed4..b2e9417 100644 --- a/enginecustom/imgui.ini +++ b/enginecustom/imgui.ini @@ -7,7 +7,7 @@ Pos=-1,652 Size=694,210 [Window][Objects] -Pos=-1,299 +Pos=6,299 Size=492,353 [Window][Terrain] diff --git a/enginecustom/physics.cpp b/enginecustom/physics.cpp index dc63360..13b86b4 100644 --- a/enginecustom/physics.cpp +++ b/enginecustom/physics.cpp @@ -91,10 +91,25 @@ bool Physics::IsColliding(Object* object1, Object* object2) { return SpheresOverlap(object1, object2); } + if (type1 == "cube" && type2 == "sphere" || (type1 == "sphere" && type2 == "cube")) + { + if (type1 == "cube") + { + return SphereCubeOverlap(object1, object2); + } + else if (type1 == "sphere") + { + return SphereCubeOverlap(object2, object1); + } + } return false; } +///////////////////////////////////////// +// AABB method for collision detection // +///////////////////////////////////////// + bool Physics::CubesOverlap(Object* cube1, Object* cube2) { XMVECTOR position1 = cube1->GetPosition(); @@ -118,8 +133,8 @@ bool Physics::SpheresOverlap(Object* sphere1, Object* sphere2) XMVECTOR position1 = sphere1->GetPosition(); XMVECTOR position2 = sphere2->GetPosition(); - XMVECTOR scale1 = sphere1->GetScale(); - XMVECTOR scale2 = sphere2->GetScale(); + XMVECTOR scale1 = sphere1->GetScale() / 2; + XMVECTOR scale2 = sphere2->GetScale() / 2; float distance = sqrt( (position1.m128_f32[0] - position2.m128_f32[0]) * (position1.m128_f32[0] - position2.m128_f32[0]) + @@ -128,7 +143,36 @@ bool Physics::SpheresOverlap(Object* sphere1, Object* sphere2) ); float radius1 = XMVectorGetX(XMVector3Length(scale1)); - float radius2 = XMVectorGetX(XMVector3Length(scale2) / 2); + float radius2 = XMVectorGetX(XMVector3Length(scale2)); return distance < radius1 + radius2; } + +bool Physics::SphereCubeOverlap(Object* cube, Object* sphere) +{ + XMVECTOR position1 = cube->GetPosition(); + XMVECTOR position2 = sphere->GetPosition(); + + XMVECTOR scale1 = cube->GetScale(); + XMVECTOR scale2 = sphere->GetScale() / 2; + + XMVECTOR min1 = position1 - scale1; + XMVECTOR max1 = position1 + scale1; + + // Get box closest point to sphere center by clamping + float x = max(min1.m128_f32[0], min(position2.m128_f32[0], max1.m128_f32[0])); + float y = max(min1.m128_f32[1], min(position2.m128_f32[1], max1.m128_f32[1])); + float z = max(min1.m128_f32[2], min(position2.m128_f32[2], max1.m128_f32[2])); + + // This is the same as SpheresOverlap + float distance = sqrt( + (x - position2.m128_f32[0]) * (x - position2.m128_f32[0]) + + (y - position2.m128_f32[1]) * (y - position2.m128_f32[1]) + + (z - position2.m128_f32[2]) * (z - position2.m128_f32[2]) + ); + + float radius = XMVectorGetX(XMVector3Length(scale2)); + + return distance < radius; +} + diff --git a/enginecustom/physics.h b/enginecustom/physics.h index 5a51a08..b9ffd1a 100644 --- a/enginecustom/physics.h +++ b/enginecustom/physics.h @@ -18,6 +18,7 @@ public: bool IsColliding(Object*, Object*); bool CubesOverlap(Object*, Object*); bool SpheresOverlap(Object*, Object*); + bool SphereCubeOverlap(Object*, Object*); private: XMVECTOR m_gravity; From 50d206649bae215fe698e51e4e59a21cd1384141 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Thu, 25 Apr 2024 10:04:48 +0200 Subject: [PATCH 15/19] refactor: terrain en cube --- enginecustom/applicationclass.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index d2ab98a..d619213 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -1271,13 +1271,13 @@ void ApplicationClass::GenerateTerrain() int scaleX, scaleY, scaleZ; scaleX = 10.0f; - scaleY = 10.0f; + scaleY = 1.0f; scaleZ = 10.0f; scaleMatrix = XMMatrixScaling(scaleX, scaleY, scaleZ); // Set the file name of the model. - strcpy_s(modelFilename, "sphere.txt"); + strcpy_s(modelFilename, "cube.txt"); strcpy_s(textureFilename, "stone01.tga"); strcpy_s(textureFilename2, "moss01.tga"); strcpy_s(textureFilename3, "alpha01.tga"); From 9dd129b7bca494301383182b04beff01937961b6 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Thu, 25 Apr 2024 10:18:46 +0200 Subject: [PATCH 16/19] feat: object id et objects collisions feat: + Ajout d'un id pour chaque objet cree + Ajout de collision entre les objets --- enginecustom/applicationclass.cpp | 20 ++++++++++++++++++-- enginecustom/applicationclass.h | 7 ++++--- enginecustom/imgui.ini | 2 +- enginecustom/object.cpp | 11 +++++++++++ enginecustom/object.h | 3 +++ 5 files changed, 37 insertions(+), 6 deletions(-) diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index d619213..a840de2 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -716,7 +716,7 @@ bool ApplicationClass::Frame(InputClass* Input) } // Update the rotation variable each frame. - rotation -= 0.0174532925f * speed; + rotation -= 0.0174532925f * m_speed; if (rotation < 0.0f) { rotation += 360.0f; @@ -760,6 +760,20 @@ bool ApplicationClass::Frame(InputClass* Input) } } + for (auto& object2 : m_object) + { + if (object->GetId() != object2->GetId() && object2 != nullptr) + { + if (m_Physics->IsColliding(object, object2)) + { + // Stop movement in any direction + object->SetVelocity(XMVectorZero()); + object->SetAcceleration(XMVectorZero()); + } + } + + } + // Apply forces float forceX = 0, forceY = 0, forceZ = 0, forceW = 0; @@ -1328,9 +1342,11 @@ void ApplicationClass::AddKobject(WCHAR* filepath) Object* newObject = new Object(); newObject->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), modelFilename, textureFilename, textureFilename2, textureFilename3); newObject->SetMass(1.0f); - newObject->SetTranslateMatrix(XMMatrixTranslation(0.0f, 50.0f, 0.0f)); newObject->SetName(filename); + newObject->SetId(m_ObjectId); + + m_ObjectId++; m_object.push_back(newObject); } diff --git a/enginecustom/applicationclass.h b/enginecustom/applicationclass.h index 87550cc..3f6836a 100644 --- a/enginecustom/applicationclass.h +++ b/enginecustom/applicationclass.h @@ -64,8 +64,8 @@ public: int GetScreenWidth() const; int GetScreenHeight() const; - float GetSpeed() const { return speed; }; - void SetSpeed(float speed) { this->speed = speed; }; + float GetSpeed() const { return m_speed; }; + void SetSpeed(float speed) { this->m_speed = speed; }; void AddCube(); void DeleteKobject(int index); @@ -116,8 +116,9 @@ private : Object* m_SelectedObject; std::vector m_cubes; std::vector m_terrainChunk; - float speed = 0.1f; // speed for the demo spinning object + float m_speed = 0.1f; // speed for the demo spinning object std::vector m_object; + int m_ObjectId = 0; // ----------------------------------- // // ------------- LIGHTS -------------- // diff --git a/enginecustom/imgui.ini b/enginecustom/imgui.ini index b2e9417..6c66b0c 100644 --- a/enginecustom/imgui.ini +++ b/enginecustom/imgui.ini @@ -7,7 +7,7 @@ Pos=-1,652 Size=694,210 [Window][Objects] -Pos=6,299 +Pos=7,299 Size=492,353 [Window][Terrain] diff --git a/enginecustom/object.cpp b/enginecustom/object.cpp index 3d19f39..ea0f053 100644 --- a/enginecustom/object.cpp +++ b/enginecustom/object.cpp @@ -12,6 +12,7 @@ Object::Object() : ModelClass() m_acceleration = XMVectorZero(); m_mass = NULL; m_isGrounded = false; + m_id = NULL; } Object::~Object() @@ -213,3 +214,13 @@ bool Object::GetGrounded() const return m_isGrounded; } +int Object::SetId(int id) +{ + return m_id = id; +} + +int Object::GetId() const +{ + return m_id; +} + diff --git a/enginecustom/object.h b/enginecustom/object.h index e488087..db82b29 100644 --- a/enginecustom/object.h +++ b/enginecustom/object.h @@ -47,11 +47,14 @@ public: std::string GetName(); void SetName(std::string name); + int SetId(int id); + int GetId() const; public : bool m_demoSpinning = false; XMVECTOR m_previousPosition; XMVECTOR m_velocity; + int m_id; private: XMMATRIX m_scaleMatrix; From daa9aa70232d0167a4869431a3061e87344964c1 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Thu, 25 Apr 2024 10:33:29 +0200 Subject: [PATCH 17/19] feat: nouveau plane feat: + Ajout d'un nouveau plane, l'ancien etait casse + "Ajout" des colisions avec les planes, les planes sont traites comme des cubes --- enginecustom/applicationclass.cpp | 2 +- enginecustom/enginecustom.vcxproj.filters | 12 +- enginecustom/imgui.ini | 2 +- enginecustom/physics.cpp | 4 + enginecustom/plane.txt | 3758 +-------------------- 5 files changed, 19 insertions(+), 3759 deletions(-) diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index a840de2..105aac2 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -1291,7 +1291,7 @@ void ApplicationClass::GenerateTerrain() scaleMatrix = XMMatrixScaling(scaleX, scaleY, scaleZ); // Set the file name of the model. - strcpy_s(modelFilename, "cube.txt"); + strcpy_s(modelFilename, "plane.txt"); strcpy_s(textureFilename, "stone01.tga"); strcpy_s(textureFilename2, "moss01.tga"); strcpy_s(textureFilename3, "alpha01.tga"); diff --git a/enginecustom/enginecustom.vcxproj.filters b/enginecustom/enginecustom.vcxproj.filters index c1fdf02..6319e5c 100644 --- a/enginecustom/enginecustom.vcxproj.filters +++ b/enginecustom/enginecustom.vcxproj.filters @@ -129,9 +129,6 @@ Fichiers sources - - Fichiers sources - Fichiers sources @@ -159,6 +156,9 @@ Fichiers sources + + Assets + @@ -402,11 +402,11 @@ Assets - - Assets - assets + + Assets + \ No newline at end of file diff --git a/enginecustom/imgui.ini b/enginecustom/imgui.ini index 6c66b0c..3117ea6 100644 --- a/enginecustom/imgui.ini +++ b/enginecustom/imgui.ini @@ -11,6 +11,6 @@ Pos=7,299 Size=492,353 [Window][Terrain] -Pos=692,768 +Pos=691,769 Size=418,94 diff --git a/enginecustom/physics.cpp b/enginecustom/physics.cpp index 13b86b4..47b41d7 100644 --- a/enginecustom/physics.cpp +++ b/enginecustom/physics.cpp @@ -83,6 +83,10 @@ bool Physics::IsColliding(Object* object1, Object* object2) std::string type1 = object1->GetName(); std::string type2 = object2->GetName(); + // Treat "plane" objects as "cube" + if (type1 == "plane") type1 = "cube"; + if (type2 == "plane") type2 = "cube"; + if (type1 == "cube" && type2 == "cube") { return CubesOverlap(object1, object2); diff --git a/enginecustom/plane.txt b/enginecustom/plane.txt index 18bf5d2..6e10635 100644 --- a/enginecustom/plane.txt +++ b/enginecustom/plane.txt @@ -1,3754 +1,10 @@ -Vertex Count: 3750 +Vertex Count: 6 Data: --5 -0 -4.6 0 0.96 0 1 -0 --4.6 -0 -5 0.04 1 0 1 -0 --5 -0 -5 0 1 0 1 -0 --4.6 -0 -4.6 0.04 0.96 0 1 -0 --4.6 -0 -5 0.04 1 0 1 -0 --5 -0 -4.6 0 0.96 0 1 -0 --4.6 -0 -4.6 0.04 0.96 0 1 -0 --4.2 -0 -5 0.08 1 0 1 -0 --4.6 -0 -5 0.04 1 0 1 -0 --4.2 -0 -4.6 0.08 0.96 0 1 -0 --4.2 -0 -5 0.08 1 0 1 -0 --4.6 -0 -4.6 0.04 0.96 0 1 -0 --4.2 -0 -4.6 0.08 0.96 0 1 -0 --3.8 -0 -5 0.12 1 0 1 -0 --4.2 -0 -5 0.08 1 0 1 -0 --3.8 -0 -4.6 0.12 0.96 0 1 -0 --3.8 -0 -5 0.12 1 0 1 -0 --4.2 -0 -4.6 0.08 0.96 0 1 -0 --3.8 -0 -4.6 0.12 0.96 0 1 -0 --3.4 -0 -5 0.16 1 0 1 -0 --3.8 -0 -5 0.12 1 0 1 -0 --3.4 -0 -4.6 0.16 0.96 0 1 -0 --3.4 -0 -5 0.16 1 0 1 -0 --3.8 -0 -4.6 0.12 0.96 0 1 -0 --3.4 -0 -4.6 0.16 0.96 0 1 -0 --3 -0 -5 0.2 1 0 1 -0 --3.4 -0 -5 0.16 1 0 1 -0 --3 -0 -4.6 0.2 0.96 0 1 -0 --3 -0 -5 0.2 1 0 1 -0 --3.4 -0 -4.6 0.16 0.96 0 1 -0 --3 -0 -4.6 0.2 0.96 0 1 -0 --2.6 -0 -5 0.24 1 0 1 -0 --3 -0 -5 0.2 1 0 1 -0 --2.6 -0 -4.6 0.24 0.96 0 1 -0 --2.6 -0 -5 0.24 1 0 1 -0 --3 -0 -4.6 0.2 0.96 0 1 -0 --2.6 -0 -4.6 0.24 0.96 0 1 -0 --2.2 -0 -5 0.28 1 0 1 -0 --2.6 -0 -5 0.24 1 0 1 -0 --2.2 -0 -4.6 0.28 0.96 0 1 -0 --2.2 -0 -5 0.28 1 0 1 -0 --2.6 -0 -4.6 0.24 0.96 0 1 -0 --2.2 -0 -4.6 0.28 0.96 0 1 -0 --1.8 -0 -5 0.32 1 0 1 -0 --2.2 -0 -5 0.28 1 0 1 -0 --1.8 -0 -4.6 0.32 0.96 0 1 -0 --1.8 -0 -5 0.32 1 0 1 -0 --2.2 -0 -4.6 0.28 0.96 0 1 -0 --1.8 -0 -4.6 0.32 0.96 0 1 -0 --1.4 -0 -5 0.36 1 0 1 -0 --1.8 -0 -5 0.32 1 0 1 -0 --1.4 -0 -4.6 0.36 0.96 0 1 -0 --1.4 -0 -5 0.36 1 0 1 -0 --1.8 -0 -4.6 0.32 0.96 0 1 -0 --1.4 -0 -4.6 0.36 0.96 0 1 -0 --1 -0 -5 0.4 1 0 1 -0 --1.4 -0 -5 0.36 1 0 1 -0 --1 -0 -4.6 0.4 0.96 0 1 -0 --1 -0 -5 0.4 1 0 1 -0 --1.4 -0 -4.6 0.36 0.96 0 1 -0 --1 -0 -4.6 0.4 0.96 0 1 -0 --0.6 -0 -5 0.44 1 0 1 -0 --1 -0 -5 0.4 1 0 1 -0 --0.6 -0 -4.6 0.44 0.96 0 1 -0 --0.6 -0 -5 0.44 1 0 1 -0 --1 -0 -4.6 0.4 0.96 0 1 -0 --0.6 -0 -4.6 0.44 0.96 0 1 -0 --0.2 -0 -5 0.48 1 0 1 -0 --0.6 -0 -5 0.44 1 0 1 -0 --0.2 -0 -4.6 0.48 0.96 0 1 -0 --0.2 -0 -5 0.48 1 0 1 -0 --0.6 -0 -4.6 0.44 0.96 0 1 -0 --0.2 -0 -4.6 0.48 0.96 0 1 -0 -0.2 -0 -5 0.52 1 0 1 -0 --0.2 -0 -5 0.48 1 0 1 -0 -0.2 -0 -4.6 0.52 0.96 0 1 -0 -0.2 -0 -5 0.52 1 0 1 -0 --0.2 -0 -4.6 0.48 0.96 0 1 -0 -0.2 -0 -4.6 0.52 0.96 0 1 -0 -0.6 -0 -5 0.56 1 0 1 -0 -0.2 -0 -5 0.52 1 0 1 -0 -0.6 -0 -4.6 0.56 0.96 0 1 -0 -0.6 -0 -5 0.56 1 0 1 -0 -0.2 -0 -4.6 0.52 0.96 0 1 -0 -0.6 -0 -4.6 0.56 0.96 0 1 -0 -1 -0 -5 0.6 1 0 1 -0 -0.6 -0 -5 0.56 1 0 1 -0 -1 -0 -4.6 0.6 0.96 0 1 -0 -1 -0 -5 0.6 1 0 1 -0 -0.6 -0 -4.6 0.56 0.96 0 1 -0 -1 -0 -4.6 0.6 0.96 0 1 -0 -1.4 -0 -5 0.64 1 0 1 -0 -1 -0 -5 0.6 1 0 1 -0 -1.4 -0 -4.6 0.64 0.96 0 1 -0 -1.4 -0 -5 0.64 1 0 1 -0 -1 -0 -4.6 0.6 0.96 0 1 -0 -1.4 -0 -4.6 0.64 0.96 0 1 -0 -1.8 -0 -5 0.68 1 0 1 -0 -1.4 -0 -5 0.64 1 0 1 -0 -1.8 -0 -4.6 0.68 0.96 0 1 -0 -1.8 -0 -5 0.68 1 0 1 -0 -1.4 -0 -4.6 0.64 0.96 0 1 -0 -1.8 -0 -4.6 0.68 0.96 0 1 -0 -2.2 -0 -5 0.72 1 0 1 -0 -1.8 -0 -5 0.68 1 0 1 -0 -2.2 -0 -4.6 0.72 0.96 0 1 -0 -2.2 -0 -5 0.72 1 0 1 -0 -1.8 -0 -4.6 0.68 0.96 0 1 -0 -2.2 -0 -4.6 0.72 0.96 0 1 -0 -2.6 -0 -5 0.76 1 0 1 -0 -2.2 -0 -5 0.72 1 0 1 -0 -2.6 -0 -4.6 0.76 0.96 0 1 -0 -2.6 -0 -5 0.76 1 0 1 -0 -2.2 -0 -4.6 0.72 0.96 0 1 -0 -2.6 -0 -4.6 0.76 0.96 0 1 -0 -3 -0 -5 0.8 1 0 1 -0 -2.6 -0 -5 0.76 1 0 1 -0 -3 -0 -4.6 0.8 0.96 0 1 -0 -3 -0 -5 0.8 1 0 1 -0 -2.6 -0 -4.6 0.76 0.96 0 1 -0 -3 -0 -4.6 0.8 0.96 0 1 -0 -3.4 -0 -5 0.84 1 0 1 -0 -3 -0 -5 0.8 1 0 1 -0 -3.4 -0 -4.6 0.84 0.96 0 1 -0 -3.4 -0 -5 0.84 1 0 1 -0 -3 -0 -4.6 0.8 0.96 0 1 -0 -3.4 -0 -4.6 0.84 0.96 0 1 -0 -3.8 -0 -5 0.88 1 0 1 -0 -3.4 -0 -5 0.84 1 0 1 -0 -3.8 -0 -4.6 0.88 0.96 0 1 -0 -3.8 -0 -5 0.88 1 0 1 -0 -3.4 -0 -4.6 0.84 0.96 0 1 -0 -3.8 -0 -4.6 0.88 0.96 0 1 -0 -4.2 -0 -5 0.92 1 0 1 -0 -3.8 -0 -5 0.88 1 0 1 -0 -4.2 -0 -4.6 0.92 0.96 0 1 -0 -4.2 -0 -5 0.92 1 0 1 -0 -3.8 -0 -4.6 0.88 0.96 0 1 -0 -4.2 -0 -4.6 0.92 0.96 0 1 -0 -4.6 -0 -5 0.96 1 0 1 -0 -4.2 -0 -5 0.92 1 0 1 -0 -4.6 -0 -4.6 0.96 0.96 0 1 -0 -4.6 -0 -5 0.96 1 0 1 -0 -4.2 -0 -4.6 0.92 0.96 0 1 -0 -4.6 -0 -4.6 0.96 0.96 0 1 -0 -5 -0 -5 1 1 0 1 -0 -4.6 -0 -5 0.96 1 0 1 -0 -5 -0 -4.6 1 0.96 0 1 -0 -5 -0 -5 1 1 0 1 -0 -4.6 -0 -4.6 0.96 0.96 0 1 -0 --5 -0 -4.2 0 0.92 0 1 -0 --4.6 -0 -4.6 0.04 0.96 0 1 -0 --5 -0 -4.6 0 0.96 0 1 -0 --4.6 -0 -4.2 0.04 0.92 0 1 -0 --4.6 -0 -4.6 0.04 0.96 0 1 -0 --5 -0 -4.2 0 0.92 0 1 -0 --4.6 -0 -4.2 0.04 0.92 0 1 -0 --4.2 -0 -4.6 0.08 0.96 0 1 -0 --4.6 -0 -4.6 0.04 0.96 0 1 -0 --4.2 -0 -4.2 0.08 0.92 0 1 -0 --4.2 -0 -4.6 0.08 0.96 0 1 -0 --4.6 -0 -4.2 0.04 0.92 0 1 -0 --4.2 -0 -4.2 0.08 0.92 0 1 -0 --3.8 -0 -4.6 0.12 0.96 0 1 -0 --4.2 -0 -4.6 0.08 0.96 0 1 -0 --3.8 -0 -4.2 0.12 0.92 0 1 -0 --3.8 -0 -4.6 0.12 0.96 0 1 -0 --4.2 -0 -4.2 0.08 0.92 0 1 -0 --3.8 -0 -4.2 0.12 0.92 0 1 -0 --3.4 -0 -4.6 0.16 0.96 0 1 -0 --3.8 -0 -4.6 0.12 0.96 0 1 -0 --3.4 -0 -4.2 0.16 0.92 0 1 -0 --3.4 -0 -4.6 0.16 0.96 0 1 -0 --3.8 -0 -4.2 0.12 0.92 0 1 -0 --3.4 -0 -4.2 0.16 0.92 0 1 -0 --3 -0 -4.6 0.2 0.96 0 1 -0 --3.4 -0 -4.6 0.16 0.96 0 1 -0 --3 -0 -4.2 0.2 0.92 0 1 -0 --3 -0 -4.6 0.2 0.96 0 1 -0 --3.4 -0 -4.2 0.16 0.92 0 1 -0 --3 -0 -4.2 0.2 0.92 0 1 -0 --2.6 -0 -4.6 0.24 0.96 0 1 -0 --3 -0 -4.6 0.2 0.96 0 1 -0 --2.6 -0 -4.2 0.24 0.92 0 1 -0 --2.6 -0 -4.6 0.24 0.96 0 1 -0 --3 -0 -4.2 0.2 0.92 0 1 -0 --2.6 -0 -4.2 0.24 0.92 0 1 -0 --2.2 -0 -4.6 0.28 0.96 0 1 -0 --2.6 -0 -4.6 0.24 0.96 0 1 -0 --2.2 -0 -4.2 0.28 0.92 0 1 -0 --2.2 -0 -4.6 0.28 0.96 0 1 -0 --2.6 -0 -4.2 0.24 0.92 0 1 -0 --2.2 -0 -4.2 0.28 0.92 0 1 -0 --1.8 -0 -4.6 0.32 0.96 0 1 -0 --2.2 -0 -4.6 0.28 0.96 0 1 -0 --1.8 -0 -4.2 0.32 0.92 0 1 -0 --1.8 -0 -4.6 0.32 0.96 0 1 -0 --2.2 -0 -4.2 0.28 0.92 0 1 -0 --1.8 -0 -4.2 0.32 0.92 0 1 -0 --1.4 -0 -4.6 0.36 0.96 0 1 -0 --1.8 -0 -4.6 0.32 0.96 0 1 -0 --1.4 -0 -4.2 0.36 0.92 0 1 -0 --1.4 -0 -4.6 0.36 0.96 0 1 -0 --1.8 -0 -4.2 0.32 0.92 0 1 -0 --1.4 -0 -4.2 0.36 0.92 0 1 -0 --1 -0 -4.6 0.4 0.96 0 1 -0 --1.4 -0 -4.6 0.36 0.96 0 1 -0 --1 -0 -4.2 0.4 0.92 0 1 -0 --1 -0 -4.6 0.4 0.96 0 1 -0 --1.4 -0 -4.2 0.36 0.92 0 1 -0 --1 -0 -4.2 0.4 0.92 0 1 -0 --0.6 -0 -4.6 0.44 0.96 0 1 -0 --1 -0 -4.6 0.4 0.96 0 1 -0 --0.6 -0 -4.2 0.44 0.92 0 1 -0 --0.6 -0 -4.6 0.44 0.96 0 1 -0 --1 -0 -4.2 0.4 0.92 0 1 -0 --0.6 -0 -4.2 0.44 0.92 0 1 -0 --0.2 -0 -4.6 0.48 0.96 0 1 -0 --0.6 -0 -4.6 0.44 0.96 0 1 -0 --0.2 -0 -4.2 0.48 0.92 0 1 -0 --0.2 -0 -4.6 0.48 0.96 0 1 -0 --0.6 -0 -4.2 0.44 0.92 0 1 -0 --0.2 -0 -4.2 0.48 0.92 0 1 -0 -0.2 -0 -4.6 0.52 0.96 0 1 -0 --0.2 -0 -4.6 0.48 0.96 0 1 -0 -0.2 -0 -4.2 0.52 0.92 0 1 -0 -0.2 -0 -4.6 0.52 0.96 0 1 -0 --0.2 -0 -4.2 0.48 0.92 0 1 -0 -0.2 -0 -4.2 0.52 0.92 0 1 -0 -0.6 -0 -4.6 0.56 0.96 0 1 -0 -0.2 -0 -4.6 0.52 0.96 0 1 -0 -0.6 -0 -4.2 0.56 0.92 0 1 -0 -0.6 -0 -4.6 0.56 0.96 0 1 -0 -0.2 -0 -4.2 0.52 0.92 0 1 -0 -0.6 -0 -4.2 0.56 0.92 0 1 -0 -1 -0 -4.6 0.6 0.96 0 1 -0 -0.6 -0 -4.6 0.56 0.96 0 1 -0 -1 -0 -4.2 0.6 0.92 0 1 -0 -1 -0 -4.6 0.6 0.96 0 1 -0 -0.6 -0 -4.2 0.56 0.92 0 1 -0 -1 -0 -4.2 0.6 0.92 0 1 -0 -1.4 -0 -4.6 0.64 0.96 0 1 -0 -1 -0 -4.6 0.6 0.96 0 1 -0 -1.4 -0 -4.2 0.64 0.92 0 1 -0 -1.4 -0 -4.6 0.64 0.96 0 1 -0 -1 -0 -4.2 0.6 0.92 0 1 -0 -1.4 -0 -4.2 0.64 0.92 0 1 -0 -1.8 -0 -4.6 0.68 0.96 0 1 -0 -1.4 -0 -4.6 0.64 0.96 0 1 -0 -1.8 -0 -4.2 0.68 0.92 0 1 -0 -1.8 -0 -4.6 0.68 0.96 0 1 -0 -1.4 -0 -4.2 0.64 0.92 0 1 -0 -1.8 -0 -4.2 0.68 0.92 0 1 -0 -2.2 -0 -4.6 0.72 0.96 0 1 -0 -1.8 -0 -4.6 0.68 0.96 0 1 -0 -2.2 -0 -4.2 0.72 0.92 0 1 -0 -2.2 -0 -4.6 0.72 0.96 0 1 -0 -1.8 -0 -4.2 0.68 0.92 0 1 -0 -2.2 -0 -4.2 0.72 0.92 0 1 -0 -2.6 -0 -4.6 0.76 0.96 0 1 -0 -2.2 -0 -4.6 0.72 0.96 0 1 -0 -2.6 -0 -4.2 0.76 0.92 0 1 -0 -2.6 -0 -4.6 0.76 0.96 0 1 -0 -2.2 -0 -4.2 0.72 0.92 0 1 -0 -2.6 -0 -4.2 0.76 0.92 0 1 -0 -3 -0 -4.6 0.8 0.96 0 1 -0 -2.6 -0 -4.6 0.76 0.96 0 1 -0 -3 -0 -4.2 0.8 0.92 0 1 -0 -3 -0 -4.6 0.8 0.96 0 1 -0 -2.6 -0 -4.2 0.76 0.92 0 1 -0 -3 -0 -4.2 0.8 0.92 0 1 -0 -3.4 -0 -4.6 0.84 0.96 0 1 -0 -3 -0 -4.6 0.8 0.96 0 1 -0 -3.4 -0 -4.2 0.84 0.92 0 1 -0 -3.4 -0 -4.6 0.84 0.96 0 1 -0 -3 -0 -4.2 0.8 0.92 0 1 -0 -3.4 -0 -4.2 0.84 0.92 0 1 -0 -3.8 -0 -4.6 0.88 0.96 0 1 -0 -3.4 -0 -4.6 0.84 0.96 0 1 -0 -3.8 -0 -4.2 0.88 0.92 0 1 -0 -3.8 -0 -4.6 0.88 0.96 0 1 -0 -3.4 -0 -4.2 0.84 0.92 0 1 -0 -3.8 -0 -4.2 0.88 0.92 0 1 -0 -4.2 -0 -4.6 0.92 0.96 0 1 -0 -3.8 -0 -4.6 0.88 0.96 0 1 -0 -4.2 -0 -4.2 0.92 0.92 0 1 -0 -4.2 -0 -4.6 0.92 0.96 0 1 -0 -3.8 -0 -4.2 0.88 0.92 0 1 -0 -4.2 -0 -4.2 0.92 0.92 0 1 -0 -4.6 -0 -4.6 0.96 0.96 0 1 -0 -4.2 -0 -4.6 0.92 0.96 0 1 -0 -4.6 -0 -4.2 0.96 0.92 0 1 -0 -4.6 -0 -4.6 0.96 0.96 0 1 -0 -4.2 -0 -4.2 0.92 0.92 0 1 -0 -4.6 -0 -4.2 0.96 0.92 0 1 -0 -5 -0 -4.6 1 0.96 0 1 -0 -4.6 -0 -4.6 0.96 0.96 0 1 -0 -5 -0 -4.2 1 0.92 0 1 -0 -5 -0 -4.6 1 0.96 0 1 -0 -4.6 -0 -4.2 0.96 0.92 0 1 -0 --5 -0 -3.8 0 0.88 0 1 -0 --4.6 -0 -4.2 0.04 0.92 0 1 -0 --5 -0 -4.2 0 0.92 0 1 -0 --4.6 -0 -3.8 0.04 0.88 0 1 -0 --4.6 -0 -4.2 0.04 0.92 0 1 -0 --5 -0 -3.8 0 0.88 0 1 -0 --4.6 -0 -3.8 0.04 0.88 0 1 -0 --4.2 -0 -4.2 0.08 0.92 0 1 -0 --4.6 -0 -4.2 0.04 0.92 0 1 -0 --4.2 -0 -3.8 0.08 0.88 0 1 -0 --4.2 -0 -4.2 0.08 0.92 0 1 -0 --4.6 -0 -3.8 0.04 0.88 0 1 -0 --4.2 -0 -3.8 0.08 0.88 0 1 -0 --3.8 -0 -4.2 0.12 0.92 0 1 -0 --4.2 -0 -4.2 0.08 0.92 0 1 -0 --3.8 -0 -3.8 0.12 0.88 0 1 -0 --3.8 -0 -4.2 0.12 0.92 0 1 -0 --4.2 -0 -3.8 0.08 0.88 0 1 -0 --3.8 -0 -3.8 0.12 0.88 0 1 -0 --3.4 -0 -4.2 0.16 0.92 0 1 -0 --3.8 -0 -4.2 0.12 0.92 0 1 -0 --3.4 -0 -3.8 0.16 0.88 0 1 -0 --3.4 -0 -4.2 0.16 0.92 0 1 -0 --3.8 -0 -3.8 0.12 0.88 0 1 -0 --3.4 -0 -3.8 0.16 0.88 0 1 -0 --3 -0 -4.2 0.2 0.92 0 1 -0 --3.4 -0 -4.2 0.16 0.92 0 1 -0 --3 -0 -3.8 0.2 0.88 0 1 -0 --3 -0 -4.2 0.2 0.92 0 1 -0 --3.4 -0 -3.8 0.16 0.88 0 1 -0 --3 -0 -3.8 0.2 0.88 0 1 -0 --2.6 -0 -4.2 0.24 0.92 0 1 -0 --3 -0 -4.2 0.2 0.92 0 1 -0 --2.6 -0 -3.8 0.24 0.88 0 1 -0 --2.6 -0 -4.2 0.24 0.92 0 1 -0 --3 -0 -3.8 0.2 0.88 0 1 -0 --2.6 -0 -3.8 0.24 0.88 0 1 -0 --2.2 -0 -4.2 0.28 0.92 0 1 -0 --2.6 -0 -4.2 0.24 0.92 0 1 -0 --2.2 -0 -3.8 0.28 0.88 0 1 -0 --2.2 -0 -4.2 0.28 0.92 0 1 -0 --2.6 -0 -3.8 0.24 0.88 0 1 -0 --2.2 -0 -3.8 0.28 0.88 0 1 -0 --1.8 -0 -4.2 0.32 0.92 0 1 -0 --2.2 -0 -4.2 0.28 0.92 0 1 -0 --1.8 -0 -3.8 0.32 0.88 0 1 -0 --1.8 -0 -4.2 0.32 0.92 0 1 -0 --2.2 -0 -3.8 0.28 0.88 0 1 -0 --1.8 -0 -3.8 0.32 0.88 0 1 -0 --1.4 -0 -4.2 0.36 0.92 0 1 -0 --1.8 -0 -4.2 0.32 0.92 0 1 -0 --1.4 -0 -3.8 0.36 0.88 0 1 -0 --1.4 -0 -4.2 0.36 0.92 0 1 -0 --1.8 -0 -3.8 0.32 0.88 0 1 -0 --1.4 -0 -3.8 0.36 0.88 0 1 -0 --1 -0 -4.2 0.4 0.92 0 1 -0 --1.4 -0 -4.2 0.36 0.92 0 1 -0 --1 -0 -3.8 0.4 0.88 0 1 -0 --1 -0 -4.2 0.4 0.92 0 1 -0 --1.4 -0 -3.8 0.36 0.88 0 1 -0 --1 -0 -3.8 0.4 0.88 0 1 -0 --0.6 -0 -4.2 0.44 0.92 0 1 -0 --1 -0 -4.2 0.4 0.92 0 1 -0 --0.6 -0 -3.8 0.44 0.88 0 1 -0 --0.6 -0 -4.2 0.44 0.92 0 1 -0 --1 -0 -3.8 0.4 0.88 0 1 -0 --0.6 -0 -3.8 0.44 0.88 0 1 -0 --0.2 -0 -4.2 0.48 0.92 0 1 -0 --0.6 -0 -4.2 0.44 0.92 0 1 -0 --0.2 -0 -3.8 0.48 0.88 0 1 -0 --0.2 -0 -4.2 0.48 0.92 0 1 -0 --0.6 -0 -3.8 0.44 0.88 0 1 -0 --0.2 -0 -3.8 0.48 0.88 0 1 -0 -0.2 -0 -4.2 0.52 0.92 0 1 -0 --0.2 -0 -4.2 0.48 0.92 0 1 -0 -0.2 -0 -3.8 0.52 0.88 0 1 -0 -0.2 -0 -4.2 0.52 0.92 0 1 -0 --0.2 -0 -3.8 0.48 0.88 0 1 -0 -0.2 -0 -3.8 0.52 0.88 0 1 -0 -0.6 -0 -4.2 0.56 0.92 0 1 -0 -0.2 -0 -4.2 0.52 0.92 0 1 -0 -0.6 -0 -3.8 0.56 0.88 0 1 -0 -0.6 -0 -4.2 0.56 0.92 0 1 -0 -0.2 -0 -3.8 0.52 0.88 0 1 -0 -0.6 -0 -3.8 0.56 0.88 0 1 -0 -1 -0 -4.2 0.6 0.92 0 1 -0 -0.6 -0 -4.2 0.56 0.92 0 1 -0 -1 -0 -3.8 0.6 0.88 0 1 -0 -1 -0 -4.2 0.6 0.92 0 1 -0 -0.6 -0 -3.8 0.56 0.88 0 1 -0 -1 -0 -3.8 0.6 0.88 0 1 -0 -1.4 -0 -4.2 0.64 0.92 0 1 -0 -1 -0 -4.2 0.6 0.92 0 1 -0 -1.4 -0 -3.8 0.64 0.88 0 1 -0 -1.4 -0 -4.2 0.64 0.92 0 1 -0 -1 -0 -3.8 0.6 0.88 0 1 -0 -1.4 -0 -3.8 0.64 0.88 0 1 -0 -1.8 -0 -4.2 0.68 0.92 0 1 -0 -1.4 -0 -4.2 0.64 0.92 0 1 -0 -1.8 -0 -3.8 0.68 0.88 0 1 -0 -1.8 -0 -4.2 0.68 0.92 0 1 -0 -1.4 -0 -3.8 0.64 0.88 0 1 -0 -1.8 -0 -3.8 0.68 0.88 0 1 -0 -2.2 -0 -4.2 0.72 0.92 0 1 -0 -1.8 -0 -4.2 0.68 0.92 0 1 -0 -2.2 -0 -3.8 0.72 0.88 0 1 -0 -2.2 -0 -4.2 0.72 0.92 0 1 -0 -1.8 -0 -3.8 0.68 0.88 0 1 -0 -2.2 -0 -3.8 0.72 0.88 0 1 -0 -2.6 -0 -4.2 0.76 0.92 0 1 -0 -2.2 -0 -4.2 0.72 0.92 0 1 -0 -2.6 -0 -3.8 0.76 0.88 0 1 -0 -2.6 -0 -4.2 0.76 0.92 0 1 -0 -2.2 -0 -3.8 0.72 0.88 0 1 -0 -2.6 -0 -3.8 0.76 0.88 0 1 -0 -3 -0 -4.2 0.8 0.92 0 1 -0 -2.6 -0 -4.2 0.76 0.92 0 1 -0 -3 -0 -3.8 0.8 0.88 0 1 -0 -3 -0 -4.2 0.8 0.92 0 1 -0 -2.6 -0 -3.8 0.76 0.88 0 1 -0 -3 -0 -3.8 0.8 0.88 0 1 -0 -3.4 -0 -4.2 0.84 0.92 0 1 -0 -3 -0 -4.2 0.8 0.92 0 1 -0 -3.4 -0 -3.8 0.84 0.88 0 1 -0 -3.4 -0 -4.2 0.84 0.92 0 1 -0 -3 -0 -3.8 0.8 0.88 0 1 -0 -3.4 -0 -3.8 0.84 0.88 0 1 -0 -3.8 -0 -4.2 0.88 0.92 0 1 -0 -3.4 -0 -4.2 0.84 0.92 0 1 -0 -3.8 -0 -3.8 0.88 0.88 0 1 -0 -3.8 -0 -4.2 0.88 0.92 0 1 -0 -3.4 -0 -3.8 0.84 0.88 0 1 -0 -3.8 -0 -3.8 0.88 0.88 0 1 -0 -4.2 -0 -4.2 0.92 0.92 0 1 -0 -3.8 -0 -4.2 0.88 0.92 0 1 -0 -4.2 -0 -3.8 0.92 0.88 0 1 -0 -4.2 -0 -4.2 0.92 0.92 0 1 -0 -3.8 -0 -3.8 0.88 0.88 0 1 -0 -4.2 -0 -3.8 0.92 0.88 0 1 -0 -4.6 -0 -4.2 0.96 0.92 0 1 -0 -4.2 -0 -4.2 0.92 0.92 0 1 -0 -4.6 -0 -3.8 0.96 0.88 0 1 -0 -4.6 -0 -4.2 0.96 0.92 0 1 -0 -4.2 -0 -3.8 0.92 0.88 0 1 -0 -4.6 -0 -3.8 0.96 0.88 0 1 -0 -5 -0 -4.2 1 0.92 0 1 -0 -4.6 -0 -4.2 0.96 0.92 0 1 -0 -5 -0 -3.8 1 0.88 0 1 -0 -5 -0 -4.2 1 0.92 0 1 -0 -4.6 -0 -3.8 0.96 0.88 0 1 -0 --5 -0 -3.4 0 0.84 0 1 -0 --4.6 -0 -3.8 0.04 0.88 0 1 -0 --5 -0 -3.8 0 0.88 0 1 -0 --4.6 -0 -3.4 0.04 0.84 0 1 -0 --4.6 -0 -3.8 0.04 0.88 0 1 -0 --5 -0 -3.4 0 0.84 0 1 -0 --4.6 -0 -3.4 0.04 0.84 0 1 -0 --4.2 -0 -3.8 0.08 0.88 0 1 -0 --4.6 -0 -3.8 0.04 0.88 0 1 -0 --4.2 -0 -3.4 0.08 0.84 0 1 -0 --4.2 -0 -3.8 0.08 0.88 0 1 -0 --4.6 -0 -3.4 0.04 0.84 0 1 -0 --4.2 -0 -3.4 0.08 0.84 0 1 -0 --3.8 -0 -3.8 0.12 0.88 0 1 -0 --4.2 -0 -3.8 0.08 0.88 0 1 -0 --3.8 -0 -3.4 0.12 0.84 0 1 -0 --3.8 -0 -3.8 0.12 0.88 0 1 -0 --4.2 -0 -3.4 0.08 0.84 0 1 -0 --3.8 -0 -3.4 0.12 0.84 0 1 -0 --3.4 -0 -3.8 0.16 0.88 0 1 -0 --3.8 -0 -3.8 0.12 0.88 0 1 -0 --3.4 -0 -3.4 0.16 0.84 0 1 -0 --3.4 -0 -3.8 0.16 0.88 0 1 -0 --3.8 -0 -3.4 0.12 0.84 0 1 -0 --3.4 -0 -3.4 0.16 0.84 0 1 -0 --3 -0 -3.8 0.2 0.88 0 1 -0 --3.4 -0 -3.8 0.16 0.88 0 1 -0 --3 -0 -3.4 0.2 0.84 0 1 -0 --3 -0 -3.8 0.2 0.88 0 1 -0 --3.4 -0 -3.4 0.16 0.84 0 1 -0 --3 -0 -3.4 0.2 0.84 0 1 -0 --2.6 -0 -3.8 0.24 0.88 0 1 -0 --3 -0 -3.8 0.2 0.88 0 1 -0 --2.6 -0 -3.4 0.24 0.84 0 1 -0 --2.6 -0 -3.8 0.24 0.88 0 1 -0 --3 -0 -3.4 0.2 0.84 0 1 -0 --2.6 -0 -3.4 0.24 0.84 0 1 -0 --2.2 -0 -3.8 0.28 0.88 0 1 -0 --2.6 -0 -3.8 0.24 0.88 0 1 -0 --2.2 -0 -3.4 0.28 0.84 0 1 -0 --2.2 -0 -3.8 0.28 0.88 0 1 -0 --2.6 -0 -3.4 0.24 0.84 0 1 -0 --2.2 -0 -3.4 0.28 0.84 0 1 -0 --1.8 -0 -3.8 0.32 0.88 0 1 -0 --2.2 -0 -3.8 0.28 0.88 0 1 -0 --1.8 -0 -3.4 0.32 0.84 0 1 -0 --1.8 -0 -3.8 0.32 0.88 0 1 -0 --2.2 -0 -3.4 0.28 0.84 0 1 -0 --1.8 -0 -3.4 0.32 0.84 0 1 -0 --1.4 -0 -3.8 0.36 0.88 0 1 -0 --1.8 -0 -3.8 0.32 0.88 0 1 -0 --1.4 -0 -3.4 0.36 0.84 0 1 -0 --1.4 -0 -3.8 0.36 0.88 0 1 -0 --1.8 -0 -3.4 0.32 0.84 0 1 -0 --1.4 -0 -3.4 0.36 0.84 0 1 -0 --1 -0 -3.8 0.4 0.88 0 1 -0 --1.4 -0 -3.8 0.36 0.88 0 1 -0 --1 -0 -3.4 0.4 0.84 0 1 -0 --1 -0 -3.8 0.4 0.88 0 1 -0 --1.4 -0 -3.4 0.36 0.84 0 1 -0 --1 -0 -3.4 0.4 0.84 0 1 -0 --0.6 -0 -3.8 0.44 0.88 0 1 -0 --1 -0 -3.8 0.4 0.88 0 1 -0 --0.6 -0 -3.4 0.44 0.84 0 1 -0 --0.6 -0 -3.8 0.44 0.88 0 1 -0 --1 -0 -3.4 0.4 0.84 0 1 -0 --0.6 -0 -3.4 0.44 0.84 0 1 -0 --0.2 -0 -3.8 0.48 0.88 0 1 -0 --0.6 -0 -3.8 0.44 0.88 0 1 -0 --0.2 -0 -3.4 0.48 0.84 0 1 -0 --0.2 -0 -3.8 0.48 0.88 0 1 -0 --0.6 -0 -3.4 0.44 0.84 0 1 -0 --0.2 -0 -3.4 0.48 0.84 0 1 -0 -0.2 -0 -3.8 0.52 0.88 0 1 -0 --0.2 -0 -3.8 0.48 0.88 0 1 -0 -0.2 -0 -3.4 0.52 0.84 0 1 -0 -0.2 -0 -3.8 0.52 0.88 0 1 -0 --0.2 -0 -3.4 0.48 0.84 0 1 -0 -0.2 -0 -3.4 0.52 0.84 0 1 -0 -0.6 -0 -3.8 0.56 0.88 0 1 -0 -0.2 -0 -3.8 0.52 0.88 0 1 -0 -0.6 -0 -3.4 0.56 0.84 0 1 -0 -0.6 -0 -3.8 0.56 0.88 0 1 -0 -0.2 -0 -3.4 0.52 0.84 0 1 -0 -0.6 -0 -3.4 0.56 0.84 0 1 -0 -1 -0 -3.8 0.6 0.88 0 1 -0 -0.6 -0 -3.8 0.56 0.88 0 1 -0 -1 -0 -3.4 0.6 0.84 0 1 -0 -1 -0 -3.8 0.6 0.88 0 1 -0 -0.6 -0 -3.4 0.56 0.84 0 1 -0 -1 -0 -3.4 0.6 0.84 0 1 -0 -1.4 -0 -3.8 0.64 0.88 0 1 -0 -1 -0 -3.8 0.6 0.88 0 1 -0 -1.4 -0 -3.4 0.64 0.84 0 1 -0 -1.4 -0 -3.8 0.64 0.88 0 1 -0 -1 -0 -3.4 0.6 0.84 0 1 -0 -1.4 -0 -3.4 0.64 0.84 0 1 -0 -1.8 -0 -3.8 0.68 0.88 0 1 -0 -1.4 -0 -3.8 0.64 0.88 0 1 -0 -1.8 -0 -3.4 0.68 0.84 0 1 -0 -1.8 -0 -3.8 0.68 0.88 0 1 -0 -1.4 -0 -3.4 0.64 0.84 0 1 -0 -1.8 -0 -3.4 0.68 0.84 0 1 -0 -2.2 -0 -3.8 0.72 0.88 0 1 -0 -1.8 -0 -3.8 0.68 0.88 0 1 -0 -2.2 -0 -3.4 0.72 0.84 0 1 -0 -2.2 -0 -3.8 0.72 0.88 0 1 -0 -1.8 -0 -3.4 0.68 0.84 0 1 -0 -2.2 -0 -3.4 0.72 0.84 0 1 -0 -2.6 -0 -3.8 0.76 0.88 0 1 -0 -2.2 -0 -3.8 0.72 0.88 0 1 -0 -2.6 -0 -3.4 0.76 0.84 0 1 -0 -2.6 -0 -3.8 0.76 0.88 0 1 -0 -2.2 -0 -3.4 0.72 0.84 0 1 -0 -2.6 -0 -3.4 0.76 0.84 0 1 -0 -3 -0 -3.8 0.8 0.88 0 1 -0 -2.6 -0 -3.8 0.76 0.88 0 1 -0 -3 -0 -3.4 0.8 0.84 0 1 -0 -3 -0 -3.8 0.8 0.88 0 1 -0 -2.6 -0 -3.4 0.76 0.84 0 1 -0 -3 -0 -3.4 0.8 0.84 0 1 -0 -3.4 -0 -3.8 0.84 0.88 0 1 -0 -3 -0 -3.8 0.8 0.88 0 1 -0 -3.4 -0 -3.4 0.84 0.84 0 1 -0 -3.4 -0 -3.8 0.84 0.88 0 1 -0 -3 -0 -3.4 0.8 0.84 0 1 -0 -3.4 -0 -3.4 0.84 0.84 0 1 -0 -3.8 -0 -3.8 0.88 0.88 0 1 -0 -3.4 -0 -3.8 0.84 0.88 0 1 -0 -3.8 -0 -3.4 0.88 0.84 0 1 -0 -3.8 -0 -3.8 0.88 0.88 0 1 -0 -3.4 -0 -3.4 0.84 0.84 0 1 -0 -3.8 -0 -3.4 0.88 0.84 0 1 -0 -4.2 -0 -3.8 0.92 0.88 0 1 -0 -3.8 -0 -3.8 0.88 0.88 0 1 -0 -4.2 -0 -3.4 0.92 0.84 0 1 -0 -4.2 -0 -3.8 0.92 0.88 0 1 -0 -3.8 -0 -3.4 0.88 0.84 0 1 -0 -4.2 -0 -3.4 0.92 0.84 0 1 -0 -4.6 -0 -3.8 0.96 0.88 0 1 -0 -4.2 -0 -3.8 0.92 0.88 0 1 -0 -4.6 -0 -3.4 0.96 0.84 0 1 -0 -4.6 -0 -3.8 0.96 0.88 0 1 -0 -4.2 -0 -3.4 0.92 0.84 0 1 -0 -4.6 -0 -3.4 0.96 0.84 0 1 -0 -5 -0 -3.8 1 0.88 0 1 -0 -4.6 -0 -3.8 0.96 0.88 0 1 -0 -5 -0 -3.4 1 0.84 0 1 -0 -5 -0 -3.8 1 0.88 0 1 -0 -4.6 -0 -3.4 0.96 0.84 0 1 -0 --5 -0 -3 0 0.8 0 1 -0 --4.6 -0 -3.4 0.04 0.84 0 1 -0 --5 -0 -3.4 0 0.84 0 1 -0 --4.6 -0 -3 0.04 0.8 0 1 -0 --4.6 -0 -3.4 0.04 0.84 0 1 -0 --5 -0 -3 0 0.8 0 1 -0 --4.6 -0 -3 0.04 0.8 0 1 -0 --4.2 -0 -3.4 0.08 0.84 0 1 -0 --4.6 -0 -3.4 0.04 0.84 0 1 -0 --4.2 -0 -3 0.08 0.8 0 1 -0 --4.2 -0 -3.4 0.08 0.84 0 1 -0 --4.6 -0 -3 0.04 0.8 0 1 -0 --4.2 -0 -3 0.08 0.8 0 1 -0 --3.8 -0 -3.4 0.12 0.84 0 1 -0 --4.2 -0 -3.4 0.08 0.84 0 1 -0 --3.8 -0 -3 0.12 0.8 0 1 -0 --3.8 -0 -3.4 0.12 0.84 0 1 -0 --4.2 -0 -3 0.08 0.8 0 1 -0 --3.8 -0 -3 0.12 0.8 0 1 -0 --3.4 -0 -3.4 0.16 0.84 0 1 -0 --3.8 -0 -3.4 0.12 0.84 0 1 -0 --3.4 -0 -3 0.16 0.8 0 1 -0 --3.4 -0 -3.4 0.16 0.84 0 1 -0 --3.8 -0 -3 0.12 0.8 0 1 -0 --3.4 -0 -3 0.16 0.8 0 1 -0 --3 -0 -3.4 0.2 0.84 0 1 -0 --3.4 -0 -3.4 0.16 0.84 0 1 -0 --3 -0 -3 0.2 0.8 0 1 -0 --3 -0 -3.4 0.2 0.84 0 1 -0 --3.4 -0 -3 0.16 0.8 0 1 -0 --3 -0 -3 0.2 0.8 0 1 -0 --2.6 -0 -3.4 0.24 0.84 0 1 -0 --3 -0 -3.4 0.2 0.84 0 1 -0 --2.6 -0 -3 0.24 0.8 0 1 -0 --2.6 -0 -3.4 0.24 0.84 0 1 -0 --3 -0 -3 0.2 0.8 0 1 -0 --2.6 -0 -3 0.24 0.8 0 1 -0 --2.2 -0 -3.4 0.28 0.84 0 1 -0 --2.6 -0 -3.4 0.24 0.84 0 1 -0 --2.2 -0 -3 0.28 0.8 0 1 -0 --2.2 -0 -3.4 0.28 0.84 0 1 -0 --2.6 -0 -3 0.24 0.8 0 1 -0 --2.2 -0 -3 0.28 0.8 0 1 -0 --1.8 -0 -3.4 0.32 0.84 0 1 -0 --2.2 -0 -3.4 0.28 0.84 0 1 -0 --1.8 -0 -3 0.32 0.8 0 1 -0 --1.8 -0 -3.4 0.32 0.84 0 1 -0 --2.2 -0 -3 0.28 0.8 0 1 -0 --1.8 -0 -3 0.32 0.8 0 1 -0 --1.4 -0 -3.4 0.36 0.84 0 1 -0 --1.8 -0 -3.4 0.32 0.84 0 1 -0 --1.4 -0 -3 0.36 0.8 0 1 -0 --1.4 -0 -3.4 0.36 0.84 0 1 -0 --1.8 -0 -3 0.32 0.8 0 1 -0 --1.4 -0 -3 0.36 0.8 0 1 -0 --1 -0 -3.4 0.4 0.84 0 1 -0 --1.4 -0 -3.4 0.36 0.84 0 1 -0 --1 -0 -3 0.4 0.8 0 1 -0 --1 -0 -3.4 0.4 0.84 0 1 -0 --1.4 -0 -3 0.36 0.8 0 1 -0 --1 -0 -3 0.4 0.8 0 1 -0 --0.6 -0 -3.4 0.44 0.84 0 1 -0 --1 -0 -3.4 0.4 0.84 0 1 -0 --0.6 -0 -3 0.44 0.8 0 1 -0 --0.6 -0 -3.4 0.44 0.84 0 1 -0 --1 -0 -3 0.4 0.8 0 1 -0 --0.6 -0 -3 0.44 0.8 0 1 -0 --0.2 -0 -3.4 0.48 0.84 0 1 -0 --0.6 -0 -3.4 0.44 0.84 0 1 -0 --0.2 -0 -3 0.48 0.8 0 1 -0 --0.2 -0 -3.4 0.48 0.84 0 1 -0 --0.6 -0 -3 0.44 0.8 0 1 -0 --0.2 -0 -3 0.48 0.8 0 1 -0 -0.2 -0 -3.4 0.52 0.84 0 1 -0 --0.2 -0 -3.4 0.48 0.84 0 1 -0 -0.2 -0 -3 0.52 0.8 0 1 -0 -0.2 -0 -3.4 0.52 0.84 0 1 -0 --0.2 -0 -3 0.48 0.8 0 1 -0 -0.2 -0 -3 0.52 0.8 0 1 -0 -0.6 -0 -3.4 0.56 0.84 0 1 -0 -0.2 -0 -3.4 0.52 0.84 0 1 -0 -0.6 -0 -3 0.56 0.8 0 1 -0 -0.6 -0 -3.4 0.56 0.84 0 1 -0 -0.2 -0 -3 0.52 0.8 0 1 -0 -0.6 -0 -3 0.56 0.8 0 1 -0 -1 -0 -3.4 0.6 0.84 0 1 -0 -0.6 -0 -3.4 0.56 0.84 0 1 -0 -1 -0 -3 0.6 0.8 0 1 -0 -1 -0 -3.4 0.6 0.84 0 1 -0 -0.6 -0 -3 0.56 0.8 0 1 -0 -1 -0 -3 0.6 0.8 0 1 -0 -1.4 -0 -3.4 0.64 0.84 0 1 -0 -1 -0 -3.4 0.6 0.84 0 1 -0 -1.4 -0 -3 0.64 0.8 0 1 -0 -1.4 -0 -3.4 0.64 0.84 0 1 -0 -1 -0 -3 0.6 0.8 0 1 -0 -1.4 -0 -3 0.64 0.8 0 1 -0 -1.8 -0 -3.4 0.68 0.84 0 1 -0 -1.4 -0 -3.4 0.64 0.84 0 1 -0 -1.8 -0 -3 0.68 0.8 0 1 -0 -1.8 -0 -3.4 0.68 0.84 0 1 -0 -1.4 -0 -3 0.64 0.8 0 1 -0 -1.8 -0 -3 0.68 0.8 0 1 -0 -2.2 -0 -3.4 0.72 0.84 0 1 -0 -1.8 -0 -3.4 0.68 0.84 0 1 -0 -2.2 -0 -3 0.72 0.8 0 1 -0 -2.2 -0 -3.4 0.72 0.84 0 1 -0 -1.8 -0 -3 0.68 0.8 0 1 -0 -2.2 -0 -3 0.72 0.8 0 1 -0 -2.6 -0 -3.4 0.76 0.84 0 1 -0 -2.2 -0 -3.4 0.72 0.84 0 1 -0 -2.6 -0 -3 0.76 0.8 0 1 -0 -2.6 -0 -3.4 0.76 0.84 0 1 -0 -2.2 -0 -3 0.72 0.8 0 1 -0 -2.6 -0 -3 0.76 0.8 0 1 -0 -3 -0 -3.4 0.8 0.84 0 1 -0 -2.6 -0 -3.4 0.76 0.84 0 1 -0 -3 -0 -3 0.8 0.8 0 1 -0 -3 -0 -3.4 0.8 0.84 0 1 -0 -2.6 -0 -3 0.76 0.8 0 1 -0 -3 -0 -3 0.8 0.8 0 1 -0 -3.4 -0 -3.4 0.84 0.84 0 1 -0 -3 -0 -3.4 0.8 0.84 0 1 -0 -3.4 -0 -3 0.84 0.8 0 1 -0 -3.4 -0 -3.4 0.84 0.84 0 1 -0 -3 -0 -3 0.8 0.8 0 1 -0 -3.4 -0 -3 0.84 0.8 0 1 -0 -3.8 -0 -3.4 0.88 0.84 0 1 -0 -3.4 -0 -3.4 0.84 0.84 0 1 -0 -3.8 -0 -3 0.88 0.8 0 1 -0 -3.8 -0 -3.4 0.88 0.84 0 1 -0 -3.4 -0 -3 0.84 0.8 0 1 -0 -3.8 -0 -3 0.88 0.8 0 1 -0 -4.2 -0 -3.4 0.92 0.84 0 1 -0 -3.8 -0 -3.4 0.88 0.84 0 1 -0 -4.2 -0 -3 0.92 0.8 0 1 -0 -4.2 -0 -3.4 0.92 0.84 0 1 -0 -3.8 -0 -3 0.88 0.8 0 1 -0 -4.2 -0 -3 0.92 0.8 0 1 -0 -4.6 -0 -3.4 0.96 0.84 0 1 -0 -4.2 -0 -3.4 0.92 0.84 0 1 -0 -4.6 -0 -3 0.96 0.8 0 1 -0 -4.6 -0 -3.4 0.96 0.84 0 1 -0 -4.2 -0 -3 0.92 0.8 0 1 -0 -4.6 -0 -3 0.96 0.8 0 1 -0 -5 -0 -3.4 1 0.84 0 1 -0 -4.6 -0 -3.4 0.96 0.84 0 1 -0 -5 -0 -3 1 0.8 0 1 -0 -5 -0 -3.4 1 0.84 0 1 -0 -4.6 -0 -3 0.96 0.8 0 1 -0 --5 -0 -2.6 0 0.76 0 1 -0 --4.6 -0 -3 0.04 0.8 0 1 -0 --5 -0 -3 0 0.8 0 1 -0 --4.6 -0 -2.6 0.04 0.76 0 1 -0 --4.6 -0 -3 0.04 0.8 0 1 -0 --5 -0 -2.6 0 0.76 0 1 -0 --4.6 -0 -2.6 0.04 0.76 0 1 -0 --4.2 -0 -3 0.08 0.8 0 1 -0 --4.6 -0 -3 0.04 0.8 0 1 -0 --4.2 -0 -2.6 0.08 0.76 0 1 -0 --4.2 -0 -3 0.08 0.8 0 1 -0 --4.6 -0 -2.6 0.04 0.76 0 1 -0 --4.2 -0 -2.6 0.08 0.76 0 1 -0 --3.8 -0 -3 0.12 0.8 0 1 -0 --4.2 -0 -3 0.08 0.8 0 1 -0 --3.8 -0 -2.6 0.12 0.76 0 1 -0 --3.8 -0 -3 0.12 0.8 0 1 -0 --4.2 -0 -2.6 0.08 0.76 0 1 -0 --3.8 -0 -2.6 0.12 0.76 0 1 -0 --3.4 -0 -3 0.16 0.8 0 1 -0 --3.8 -0 -3 0.12 0.8 0 1 -0 --3.4 -0 -2.6 0.16 0.76 0 1 -0 --3.4 -0 -3 0.16 0.8 0 1 -0 --3.8 -0 -2.6 0.12 0.76 0 1 -0 --3.4 -0 -2.6 0.16 0.76 0 1 -0 --3 -0 -3 0.2 0.8 0 1 -0 --3.4 -0 -3 0.16 0.8 0 1 -0 --3 -0 -2.6 0.2 0.76 0 1 -0 --3 -0 -3 0.2 0.8 0 1 -0 --3.4 -0 -2.6 0.16 0.76 0 1 -0 --3 -0 -2.6 0.2 0.76 0 1 -0 --2.6 -0 -3 0.24 0.8 0 1 -0 --3 -0 -3 0.2 0.8 0 1 -0 --2.6 -0 -2.6 0.24 0.76 0 1 -0 --2.6 -0 -3 0.24 0.8 0 1 -0 --3 -0 -2.6 0.2 0.76 0 1 -0 --2.6 -0 -2.6 0.24 0.76 0 1 -0 --2.2 -0 -3 0.28 0.8 0 1 -0 --2.6 -0 -3 0.24 0.8 0 1 -0 --2.2 -0 -2.6 0.28 0.76 0 1 -0 --2.2 -0 -3 0.28 0.8 0 1 -0 --2.6 -0 -2.6 0.24 0.76 0 1 -0 --2.2 -0 -2.6 0.28 0.76 0 1 -0 --1.8 -0 -3 0.32 0.8 0 1 -0 --2.2 -0 -3 0.28 0.8 0 1 -0 --1.8 -0 -2.6 0.32 0.76 0 1 -0 --1.8 -0 -3 0.32 0.8 0 1 -0 --2.2 -0 -2.6 0.28 0.76 0 1 -0 --1.8 -0 -2.6 0.32 0.76 0 1 -0 --1.4 -0 -3 0.36 0.8 0 1 -0 --1.8 -0 -3 0.32 0.8 0 1 -0 --1.4 -0 -2.6 0.36 0.76 0 1 -0 --1.4 -0 -3 0.36 0.8 0 1 -0 --1.8 -0 -2.6 0.32 0.76 0 1 -0 --1.4 -0 -2.6 0.36 0.76 0 1 -0 --1 -0 -3 0.4 0.8 0 1 -0 --1.4 -0 -3 0.36 0.8 0 1 -0 --1 -0 -2.6 0.4 0.76 0 1 -0 --1 -0 -3 0.4 0.8 0 1 -0 --1.4 -0 -2.6 0.36 0.76 0 1 -0 --1 -0 -2.6 0.4 0.76 0 1 -0 --0.6 -0 -3 0.44 0.8 0 1 -0 --1 -0 -3 0.4 0.8 0 1 -0 --0.6 -0 -2.6 0.44 0.76 0 1 -0 --0.6 -0 -3 0.44 0.8 0 1 -0 --1 -0 -2.6 0.4 0.76 0 1 -0 --0.6 -0 -2.6 0.44 0.76 0 1 -0 --0.2 -0 -3 0.48 0.8 0 1 -0 --0.6 -0 -3 0.44 0.8 0 1 -0 --0.2 -0 -2.6 0.48 0.76 0 1 -0 --0.2 -0 -3 0.48 0.8 0 1 -0 --0.6 -0 -2.6 0.44 0.76 0 1 -0 --0.2 -0 -2.6 0.48 0.76 0 1 -0 -0.2 -0 -3 0.52 0.8 0 1 -0 --0.2 -0 -3 0.48 0.8 0 1 -0 -0.2 -0 -2.6 0.52 0.76 0 1 -0 -0.2 -0 -3 0.52 0.8 0 1 -0 --0.2 -0 -2.6 0.48 0.76 0 1 -0 -0.2 -0 -2.6 0.52 0.76 0 1 -0 -0.6 -0 -3 0.56 0.8 0 1 -0 -0.2 -0 -3 0.52 0.8 0 1 -0 -0.6 -0 -2.6 0.56 0.76 0 1 -0 -0.6 -0 -3 0.56 0.8 0 1 -0 -0.2 -0 -2.6 0.52 0.76 0 1 -0 -0.6 -0 -2.6 0.56 0.76 0 1 -0 -1 -0 -3 0.6 0.8 0 1 -0 -0.6 -0 -3 0.56 0.8 0 1 -0 -1 -0 -2.6 0.6 0.76 0 1 -0 -1 -0 -3 0.6 0.8 0 1 -0 -0.6 -0 -2.6 0.56 0.76 0 1 -0 -1 -0 -2.6 0.6 0.76 0 1 -0 -1.4 -0 -3 0.64 0.8 0 1 -0 -1 -0 -3 0.6 0.8 0 1 -0 -1.4 -0 -2.6 0.64 0.76 0 1 -0 -1.4 -0 -3 0.64 0.8 0 1 -0 -1 -0 -2.6 0.6 0.76 0 1 -0 -1.4 -0 -2.6 0.64 0.76 0 1 -0 -1.8 -0 -3 0.68 0.8 0 1 -0 -1.4 -0 -3 0.64 0.8 0 1 -0 -1.8 -0 -2.6 0.68 0.76 0 1 -0 -1.8 -0 -3 0.68 0.8 0 1 -0 -1.4 -0 -2.6 0.64 0.76 0 1 -0 -1.8 -0 -2.6 0.68 0.76 0 1 -0 -2.2 -0 -3 0.72 0.8 0 1 -0 -1.8 -0 -3 0.68 0.8 0 1 -0 -2.2 -0 -2.6 0.72 0.76 0 1 -0 -2.2 -0 -3 0.72 0.8 0 1 -0 -1.8 -0 -2.6 0.68 0.76 0 1 -0 -2.2 -0 -2.6 0.72 0.76 0 1 -0 -2.6 -0 -3 0.76 0.8 0 1 -0 -2.2 -0 -3 0.72 0.8 0 1 -0 -2.6 -0 -2.6 0.76 0.76 0 1 -0 -2.6 -0 -3 0.76 0.8 0 1 -0 -2.2 -0 -2.6 0.72 0.76 0 1 -0 -2.6 -0 -2.6 0.76 0.76 0 1 -0 -3 -0 -3 0.8 0.8 0 1 -0 -2.6 -0 -3 0.76 0.8 0 1 -0 -3 -0 -2.6 0.8 0.76 0 1 -0 -3 -0 -3 0.8 0.8 0 1 -0 -2.6 -0 -2.6 0.76 0.76 0 1 -0 -3 -0 -2.6 0.8 0.76 0 1 -0 -3.4 -0 -3 0.84 0.8 0 1 -0 -3 -0 -3 0.8 0.8 0 1 -0 -3.4 -0 -2.6 0.84 0.76 0 1 -0 -3.4 -0 -3 0.84 0.8 0 1 -0 -3 -0 -2.6 0.8 0.76 0 1 -0 -3.4 -0 -2.6 0.84 0.76 0 1 -0 -3.8 -0 -3 0.88 0.8 0 1 -0 -3.4 -0 -3 0.84 0.8 0 1 -0 -3.8 -0 -2.6 0.88 0.76 0 1 -0 -3.8 -0 -3 0.88 0.8 0 1 -0 -3.4 -0 -2.6 0.84 0.76 0 1 -0 -3.8 -0 -2.6 0.88 0.76 0 1 -0 -4.2 -0 -3 0.92 0.8 0 1 -0 -3.8 -0 -3 0.88 0.8 0 1 -0 -4.2 -0 -2.6 0.92 0.76 0 1 -0 -4.2 -0 -3 0.92 0.8 0 1 -0 -3.8 -0 -2.6 0.88 0.76 0 1 -0 -4.2 -0 -2.6 0.92 0.76 0 1 -0 -4.6 -0 -3 0.96 0.8 0 1 -0 -4.2 -0 -3 0.92 0.8 0 1 -0 -4.6 -0 -2.6 0.96 0.76 0 1 -0 -4.6 -0 -3 0.96 0.8 0 1 -0 -4.2 -0 -2.6 0.92 0.76 0 1 -0 -4.6 -0 -2.6 0.96 0.76 0 1 -0 -5 -0 -3 1 0.8 0 1 -0 -4.6 -0 -3 0.96 0.8 0 1 -0 -5 -0 -2.6 1 0.76 0 1 -0 -5 -0 -3 1 0.8 0 1 -0 -4.6 -0 -2.6 0.96 0.76 0 1 -0 --5 -0 -2.2 0 0.72 0 1 -0 --4.6 -0 -2.6 0.04 0.76 0 1 -0 --5 -0 -2.6 0 0.76 0 1 -0 --4.6 -0 -2.2 0.04 0.72 0 1 -0 --4.6 -0 -2.6 0.04 0.76 0 1 -0 --5 -0 -2.2 0 0.72 0 1 -0 --4.6 -0 -2.2 0.04 0.72 0 1 -0 --4.2 -0 -2.6 0.08 0.76 0 1 -0 --4.6 -0 -2.6 0.04 0.76 0 1 -0 --4.2 -0 -2.2 0.08 0.72 0 1 -0 --4.2 -0 -2.6 0.08 0.76 0 1 -0 --4.6 -0 -2.2 0.04 0.72 0 1 -0 --4.2 -0 -2.2 0.08 0.72 0 1 -0 --3.8 -0 -2.6 0.12 0.76 0 1 -0 --4.2 -0 -2.6 0.08 0.76 0 1 -0 --3.8 -0 -2.2 0.12 0.72 0 1 -0 --3.8 -0 -2.6 0.12 0.76 0 1 -0 --4.2 -0 -2.2 0.08 0.72 0 1 -0 --3.8 -0 -2.2 0.12 0.72 0 1 -0 --3.4 -0 -2.6 0.16 0.76 0 1 -0 --3.8 -0 -2.6 0.12 0.76 0 1 -0 --3.4 -0 -2.2 0.16 0.72 0 1 -0 --3.4 -0 -2.6 0.16 0.76 0 1 -0 --3.8 -0 -2.2 0.12 0.72 0 1 -0 --3.4 -0 -2.2 0.16 0.72 0 1 -0 --3 -0 -2.6 0.2 0.76 0 1 -0 --3.4 -0 -2.6 0.16 0.76 0 1 -0 --3 -0 -2.2 0.2 0.72 0 1 -0 --3 -0 -2.6 0.2 0.76 0 1 -0 --3.4 -0 -2.2 0.16 0.72 0 1 -0 --3 -0 -2.2 0.2 0.72 0 1 -0 --2.6 -0 -2.6 0.24 0.76 0 1 -0 --3 -0 -2.6 0.2 0.76 0 1 -0 --2.6 -0 -2.2 0.24 0.72 0 1 -0 --2.6 -0 -2.6 0.24 0.76 0 1 -0 --3 -0 -2.2 0.2 0.72 0 1 -0 --2.6 -0 -2.2 0.24 0.72 0 1 -0 --2.2 -0 -2.6 0.28 0.76 0 1 -0 --2.6 -0 -2.6 0.24 0.76 0 1 -0 --2.2 -0 -2.2 0.28 0.72 0 1 -0 --2.2 -0 -2.6 0.28 0.76 0 1 -0 --2.6 -0 -2.2 0.24 0.72 0 1 -0 --2.2 -0 -2.2 0.28 0.72 0 1 -0 --1.8 -0 -2.6 0.32 0.76 0 1 -0 --2.2 -0 -2.6 0.28 0.76 0 1 -0 --1.8 -0 -2.2 0.32 0.72 0 1 -0 --1.8 -0 -2.6 0.32 0.76 0 1 -0 --2.2 -0 -2.2 0.28 0.72 0 1 -0 --1.8 -0 -2.2 0.32 0.72 0 1 -0 --1.4 -0 -2.6 0.36 0.76 0 1 -0 --1.8 -0 -2.6 0.32 0.76 0 1 -0 --1.4 -0 -2.2 0.36 0.72 0 1 -0 --1.4 -0 -2.6 0.36 0.76 0 1 -0 --1.8 -0 -2.2 0.32 0.72 0 1 -0 --1.4 -0 -2.2 0.36 0.72 0 1 -0 --1 -0 -2.6 0.4 0.76 0 1 -0 --1.4 -0 -2.6 0.36 0.76 0 1 -0 --1 -0 -2.2 0.4 0.72 0 1 -0 --1 -0 -2.6 0.4 0.76 0 1 -0 --1.4 -0 -2.2 0.36 0.72 0 1 -0 --1 -0 -2.2 0.4 0.72 0 1 -0 --0.6 -0 -2.6 0.44 0.76 0 1 -0 --1 -0 -2.6 0.4 0.76 0 1 -0 --0.6 -0 -2.2 0.44 0.72 0 1 -0 --0.6 -0 -2.6 0.44 0.76 0 1 -0 --1 -0 -2.2 0.4 0.72 0 1 -0 --0.6 -0 -2.2 0.44 0.72 0 1 -0 --0.2 -0 -2.6 0.48 0.76 0 1 -0 --0.6 -0 -2.6 0.44 0.76 0 1 -0 --0.2 -0 -2.2 0.48 0.72 0 1 -0 --0.2 -0 -2.6 0.48 0.76 0 1 -0 --0.6 -0 -2.2 0.44 0.72 0 1 -0 --0.2 -0 -2.2 0.48 0.72 0 1 -0 -0.2 -0 -2.6 0.52 0.76 0 1 -0 --0.2 -0 -2.6 0.48 0.76 0 1 -0 -0.2 -0 -2.2 0.52 0.72 0 1 -0 -0.2 -0 -2.6 0.52 0.76 0 1 -0 --0.2 -0 -2.2 0.48 0.72 0 1 -0 -0.2 -0 -2.2 0.52 0.72 0 1 -0 -0.6 -0 -2.6 0.56 0.76 0 1 -0 -0.2 -0 -2.6 0.52 0.76 0 1 -0 -0.6 -0 -2.2 0.56 0.72 0 1 -0 -0.6 -0 -2.6 0.56 0.76 0 1 -0 -0.2 -0 -2.2 0.52 0.72 0 1 -0 -0.6 -0 -2.2 0.56 0.72 0 1 -0 -1 -0 -2.6 0.6 0.76 0 1 -0 -0.6 -0 -2.6 0.56 0.76 0 1 -0 -1 -0 -2.2 0.6 0.72 0 1 -0 -1 -0 -2.6 0.6 0.76 0 1 -0 -0.6 -0 -2.2 0.56 0.72 0 1 -0 -1 -0 -2.2 0.6 0.72 0 1 -0 -1.4 -0 -2.6 0.64 0.76 0 1 -0 -1 -0 -2.6 0.6 0.76 0 1 -0 -1.4 -0 -2.2 0.64 0.72 0 1 -0 -1.4 -0 -2.6 0.64 0.76 0 1 -0 -1 -0 -2.2 0.6 0.72 0 1 -0 -1.4 -0 -2.2 0.64 0.72 0 1 -0 -1.8 -0 -2.6 0.68 0.76 0 1 -0 -1.4 -0 -2.6 0.64 0.76 0 1 -0 -1.8 -0 -2.2 0.68 0.72 0 1 -0 -1.8 -0 -2.6 0.68 0.76 0 1 -0 -1.4 -0 -2.2 0.64 0.72 0 1 -0 -1.8 -0 -2.2 0.68 0.72 0 1 -0 -2.2 -0 -2.6 0.72 0.76 0 1 -0 -1.8 -0 -2.6 0.68 0.76 0 1 -0 -2.2 -0 -2.2 0.72 0.72 0 1 -0 -2.2 -0 -2.6 0.72 0.76 0 1 -0 -1.8 -0 -2.2 0.68 0.72 0 1 -0 -2.2 -0 -2.2 0.72 0.72 0 1 -0 -2.6 -0 -2.6 0.76 0.76 0 1 -0 -2.2 -0 -2.6 0.72 0.76 0 1 -0 -2.6 -0 -2.2 0.76 0.72 0 1 -0 -2.6 -0 -2.6 0.76 0.76 0 1 -0 -2.2 -0 -2.2 0.72 0.72 0 1 -0 -2.6 -0 -2.2 0.76 0.72 0 1 -0 -3 -0 -2.6 0.8 0.76 0 1 -0 -2.6 -0 -2.6 0.76 0.76 0 1 -0 -3 -0 -2.2 0.8 0.72 0 1 -0 -3 -0 -2.6 0.8 0.76 0 1 -0 -2.6 -0 -2.2 0.76 0.72 0 1 -0 -3 -0 -2.2 0.8 0.72 0 1 -0 -3.4 -0 -2.6 0.84 0.76 0 1 -0 -3 -0 -2.6 0.8 0.76 0 1 -0 -3.4 -0 -2.2 0.84 0.72 0 1 -0 -3.4 -0 -2.6 0.84 0.76 0 1 -0 -3 -0 -2.2 0.8 0.72 0 1 -0 -3.4 -0 -2.2 0.84 0.72 0 1 -0 -3.8 -0 -2.6 0.88 0.76 0 1 -0 -3.4 -0 -2.6 0.84 0.76 0 1 -0 -3.8 -0 -2.2 0.88 0.72 0 1 -0 -3.8 -0 -2.6 0.88 0.76 0 1 -0 -3.4 -0 -2.2 0.84 0.72 0 1 -0 -3.8 -0 -2.2 0.88 0.72 0 1 -0 -4.2 -0 -2.6 0.92 0.76 0 1 -0 -3.8 -0 -2.6 0.88 0.76 0 1 -0 -4.2 -0 -2.2 0.92 0.72 0 1 -0 -4.2 -0 -2.6 0.92 0.76 0 1 -0 -3.8 -0 -2.2 0.88 0.72 0 1 -0 -4.2 -0 -2.2 0.92 0.72 0 1 -0 -4.6 -0 -2.6 0.96 0.76 0 1 -0 -4.2 -0 -2.6 0.92 0.76 0 1 -0 -4.6 -0 -2.2 0.96 0.72 0 1 -0 -4.6 -0 -2.6 0.96 0.76 0 1 -0 -4.2 -0 -2.2 0.92 0.72 0 1 -0 -4.6 -0 -2.2 0.96 0.72 0 1 -0 -5 -0 -2.6 1 0.76 0 1 -0 -4.6 -0 -2.6 0.96 0.76 0 1 -0 -5 -0 -2.2 1 0.72 0 1 -0 -5 -0 -2.6 1 0.76 0 1 -0 -4.6 -0 -2.2 0.96 0.72 0 1 -0 --5 -0 -1.8 0 0.68 0 1 -0 --4.6 -0 -2.2 0.04 0.72 0 1 -0 --5 -0 -2.2 0 0.72 0 1 -0 --4.6 -0 -1.8 0.04 0.68 0 1 -0 --4.6 -0 -2.2 0.04 0.72 0 1 -0 --5 -0 -1.8 0 0.68 0 1 -0 --4.6 -0 -1.8 0.04 0.68 0 1 -0 --4.2 -0 -2.2 0.08 0.72 0 1 -0 --4.6 -0 -2.2 0.04 0.72 0 1 -0 --4.2 -0 -1.8 0.08 0.68 0 1 -0 --4.2 -0 -2.2 0.08 0.72 0 1 -0 --4.6 -0 -1.8 0.04 0.68 0 1 -0 --4.2 -0 -1.8 0.08 0.68 0 1 -0 --3.8 -0 -2.2 0.12 0.72 0 1 -0 --4.2 -0 -2.2 0.08 0.72 0 1 -0 --3.8 -0 -1.8 0.12 0.68 0 1 -0 --3.8 -0 -2.2 0.12 0.72 0 1 -0 --4.2 -0 -1.8 0.08 0.68 0 1 -0 --3.8 -0 -1.8 0.12 0.68 0 1 -0 --3.4 -0 -2.2 0.16 0.72 0 1 -0 --3.8 -0 -2.2 0.12 0.72 0 1 -0 --3.4 -0 -1.8 0.16 0.68 0 1 -0 --3.4 -0 -2.2 0.16 0.72 0 1 -0 --3.8 -0 -1.8 0.12 0.68 0 1 -0 --3.4 -0 -1.8 0.16 0.68 0 1 -0 --3 -0 -2.2 0.2 0.72 0 1 -0 --3.4 -0 -2.2 0.16 0.72 0 1 -0 --3 -0 -1.8 0.2 0.68 0 1 -0 --3 -0 -2.2 0.2 0.72 0 1 -0 --3.4 -0 -1.8 0.16 0.68 0 1 -0 --3 -0 -1.8 0.2 0.68 0 1 -0 --2.6 -0 -2.2 0.24 0.72 0 1 -0 --3 -0 -2.2 0.2 0.72 0 1 -0 --2.6 -0 -1.8 0.24 0.68 0 1 -0 --2.6 -0 -2.2 0.24 0.72 0 1 -0 --3 -0 -1.8 0.2 0.68 0 1 -0 --2.6 -0 -1.8 0.24 0.68 0 1 -0 --2.2 -0 -2.2 0.28 0.72 0 1 -0 --2.6 -0 -2.2 0.24 0.72 0 1 -0 --2.2 -0 -1.8 0.28 0.68 0 1 -0 --2.2 -0 -2.2 0.28 0.72 0 1 -0 --2.6 -0 -1.8 0.24 0.68 0 1 -0 --2.2 -0 -1.8 0.28 0.68 0 1 -0 --1.8 -0 -2.2 0.32 0.72 0 1 -0 --2.2 -0 -2.2 0.28 0.72 0 1 -0 --1.8 -0 -1.8 0.32 0.68 0 1 -0 --1.8 -0 -2.2 0.32 0.72 0 1 -0 --2.2 -0 -1.8 0.28 0.68 0 1 -0 --1.8 -0 -1.8 0.32 0.68 0 1 -0 --1.4 -0 -2.2 0.36 0.72 0 1 -0 --1.8 -0 -2.2 0.32 0.72 0 1 -0 --1.4 -0 -1.8 0.36 0.68 0 1 -0 --1.4 -0 -2.2 0.36 0.72 0 1 -0 --1.8 -0 -1.8 0.32 0.68 0 1 -0 --1.4 -0 -1.8 0.36 0.68 0 1 -0 --1 -0 -2.2 0.4 0.72 0 1 -0 --1.4 -0 -2.2 0.36 0.72 0 1 -0 --1 -0 -1.8 0.4 0.68 0 1 -0 --1 -0 -2.2 0.4 0.72 0 1 -0 --1.4 -0 -1.8 0.36 0.68 0 1 -0 --1 -0 -1.8 0.4 0.68 0 1 -0 --0.6 -0 -2.2 0.44 0.72 0 1 -0 --1 -0 -2.2 0.4 0.72 0 1 -0 --0.6 -0 -1.8 0.44 0.68 0 1 -0 --0.6 -0 -2.2 0.44 0.72 0 1 -0 --1 -0 -1.8 0.4 0.68 0 1 -0 --0.6 -0 -1.8 0.44 0.68 0 1 -0 --0.2 -0 -2.2 0.48 0.72 0 1 -0 --0.6 -0 -2.2 0.44 0.72 0 1 -0 --0.2 -0 -1.8 0.48 0.68 0 1 -0 --0.2 -0 -2.2 0.48 0.72 0 1 -0 --0.6 -0 -1.8 0.44 0.68 0 1 -0 --0.2 -0 -1.8 0.48 0.68 0 1 -0 -0.2 -0 -2.2 0.52 0.72 0 1 -0 --0.2 -0 -2.2 0.48 0.72 0 1 -0 -0.2 -0 -1.8 0.52 0.68 0 1 -0 -0.2 -0 -2.2 0.52 0.72 0 1 -0 --0.2 -0 -1.8 0.48 0.68 0 1 -0 -0.2 -0 -1.8 0.52 0.68 0 1 -0 -0.6 -0 -2.2 0.56 0.72 0 1 -0 -0.2 -0 -2.2 0.52 0.72 0 1 -0 -0.6 -0 -1.8 0.56 0.68 0 1 -0 -0.6 -0 -2.2 0.56 0.72 0 1 -0 -0.2 -0 -1.8 0.52 0.68 0 1 -0 -0.6 -0 -1.8 0.56 0.68 0 1 -0 -1 -0 -2.2 0.6 0.72 0 1 -0 -0.6 -0 -2.2 0.56 0.72 0 1 -0 -1 -0 -1.8 0.6 0.68 0 1 -0 -1 -0 -2.2 0.6 0.72 0 1 -0 -0.6 -0 -1.8 0.56 0.68 0 1 -0 -1 -0 -1.8 0.6 0.68 0 1 -0 -1.4 -0 -2.2 0.64 0.72 0 1 -0 -1 -0 -2.2 0.6 0.72 0 1 -0 -1.4 -0 -1.8 0.64 0.68 0 1 -0 -1.4 -0 -2.2 0.64 0.72 0 1 -0 -1 -0 -1.8 0.6 0.68 0 1 -0 -1.4 -0 -1.8 0.64 0.68 0 1 -0 -1.8 -0 -2.2 0.68 0.72 0 1 -0 -1.4 -0 -2.2 0.64 0.72 0 1 -0 -1.8 -0 -1.8 0.68 0.68 0 1 -0 -1.8 -0 -2.2 0.68 0.72 0 1 -0 -1.4 -0 -1.8 0.64 0.68 0 1 -0 -1.8 -0 -1.8 0.68 0.68 0 1 -0 -2.2 -0 -2.2 0.72 0.72 0 1 -0 -1.8 -0 -2.2 0.68 0.72 0 1 -0 -2.2 -0 -1.8 0.72 0.68 0 1 -0 -2.2 -0 -2.2 0.72 0.72 0 1 -0 -1.8 -0 -1.8 0.68 0.68 0 1 -0 -2.2 -0 -1.8 0.72 0.68 0 1 -0 -2.6 -0 -2.2 0.76 0.72 0 1 -0 -2.2 -0 -2.2 0.72 0.72 0 1 -0 -2.6 -0 -1.8 0.76 0.68 0 1 -0 -2.6 -0 -2.2 0.76 0.72 0 1 -0 -2.2 -0 -1.8 0.72 0.68 0 1 -0 -2.6 -0 -1.8 0.76 0.68 0 1 -0 -3 -0 -2.2 0.8 0.72 0 1 -0 -2.6 -0 -2.2 0.76 0.72 0 1 -0 -3 -0 -1.8 0.8 0.68 0 1 -0 -3 -0 -2.2 0.8 0.72 0 1 -0 -2.6 -0 -1.8 0.76 0.68 0 1 -0 -3 -0 -1.8 0.8 0.68 0 1 -0 -3.4 -0 -2.2 0.84 0.72 0 1 -0 -3 -0 -2.2 0.8 0.72 0 1 -0 -3.4 -0 -1.8 0.84 0.68 0 1 -0 -3.4 -0 -2.2 0.84 0.72 0 1 -0 -3 -0 -1.8 0.8 0.68 0 1 -0 -3.4 -0 -1.8 0.84 0.68 0 1 -0 -3.8 -0 -2.2 0.88 0.72 0 1 -0 -3.4 -0 -2.2 0.84 0.72 0 1 -0 -3.8 -0 -1.8 0.88 0.68 0 1 -0 -3.8 -0 -2.2 0.88 0.72 0 1 -0 -3.4 -0 -1.8 0.84 0.68 0 1 -0 -3.8 -0 -1.8 0.88 0.68 0 1 -0 -4.2 -0 -2.2 0.92 0.72 0 1 -0 -3.8 -0 -2.2 0.88 0.72 0 1 -0 -4.2 -0 -1.8 0.92 0.68 0 1 -0 -4.2 -0 -2.2 0.92 0.72 0 1 -0 -3.8 -0 -1.8 0.88 0.68 0 1 -0 -4.2 -0 -1.8 0.92 0.68 0 1 -0 -4.6 -0 -2.2 0.96 0.72 0 1 -0 -4.2 -0 -2.2 0.92 0.72 0 1 -0 -4.6 -0 -1.8 0.96 0.68 0 1 -0 -4.6 -0 -2.2 0.96 0.72 0 1 -0 -4.2 -0 -1.8 0.92 0.68 0 1 -0 -4.6 -0 -1.8 0.96 0.68 0 1 -0 -5 -0 -2.2 1 0.72 0 1 -0 -4.6 -0 -2.2 0.96 0.72 0 1 -0 -5 -0 -1.8 1 0.68 0 1 -0 -5 -0 -2.2 1 0.72 0 1 -0 -4.6 -0 -1.8 0.96 0.68 0 1 -0 --5 -0 -1.4 0 0.64 0 1 -0 --4.6 -0 -1.8 0.04 0.68 0 1 -0 --5 -0 -1.8 0 0.68 0 1 -0 --4.6 -0 -1.4 0.04 0.64 0 1 -0 --4.6 -0 -1.8 0.04 0.68 0 1 -0 --5 -0 -1.4 0 0.64 0 1 -0 --4.6 -0 -1.4 0.04 0.64 0 1 -0 --4.2 -0 -1.8 0.08 0.68 0 1 -0 --4.6 -0 -1.8 0.04 0.68 0 1 -0 --4.2 -0 -1.4 0.08 0.64 0 1 -0 --4.2 -0 -1.8 0.08 0.68 0 1 -0 --4.6 -0 -1.4 0.04 0.64 0 1 -0 --4.2 -0 -1.4 0.08 0.64 0 1 -0 --3.8 -0 -1.8 0.12 0.68 0 1 -0 --4.2 -0 -1.8 0.08 0.68 0 1 -0 --3.8 -0 -1.4 0.12 0.64 0 1 -0 --3.8 -0 -1.8 0.12 0.68 0 1 -0 --4.2 -0 -1.4 0.08 0.64 0 1 -0 --3.8 -0 -1.4 0.12 0.64 0 1 -0 --3.4 -0 -1.8 0.16 0.68 0 1 -0 --3.8 -0 -1.8 0.12 0.68 0 1 -0 --3.4 -0 -1.4 0.16 0.64 0 1 -0 --3.4 -0 -1.8 0.16 0.68 0 1 -0 --3.8 -0 -1.4 0.12 0.64 0 1 -0 --3.4 -0 -1.4 0.16 0.64 0 1 -0 --3 -0 -1.8 0.2 0.68 0 1 -0 --3.4 -0 -1.8 0.16 0.68 0 1 -0 --3 -0 -1.4 0.2 0.64 0 1 -0 --3 -0 -1.8 0.2 0.68 0 1 -0 --3.4 -0 -1.4 0.16 0.64 0 1 -0 --3 -0 -1.4 0.2 0.64 0 1 -0 --2.6 -0 -1.8 0.24 0.68 0 1 -0 --3 -0 -1.8 0.2 0.68 0 1 -0 --2.6 -0 -1.4 0.24 0.64 0 1 -0 --2.6 -0 -1.8 0.24 0.68 0 1 -0 --3 -0 -1.4 0.2 0.64 0 1 -0 --2.6 -0 -1.4 0.24 0.64 0 1 -0 --2.2 -0 -1.8 0.28 0.68 0 1 -0 --2.6 -0 -1.8 0.24 0.68 0 1 -0 --2.2 -0 -1.4 0.28 0.64 0 1 -0 --2.2 -0 -1.8 0.28 0.68 0 1 -0 --2.6 -0 -1.4 0.24 0.64 0 1 -0 --2.2 -0 -1.4 0.28 0.64 0 1 -0 --1.8 -0 -1.8 0.32 0.68 0 1 -0 --2.2 -0 -1.8 0.28 0.68 0 1 -0 --1.8 -0 -1.4 0.32 0.64 0 1 -0 --1.8 -0 -1.8 0.32 0.68 0 1 -0 --2.2 -0 -1.4 0.28 0.64 0 1 -0 --1.8 -0 -1.4 0.32 0.64 0 1 -0 --1.4 -0 -1.8 0.36 0.68 0 1 -0 --1.8 -0 -1.8 0.32 0.68 0 1 -0 --1.4 -0 -1.4 0.36 0.64 0 1 -0 --1.4 -0 -1.8 0.36 0.68 0 1 -0 --1.8 -0 -1.4 0.32 0.64 0 1 -0 --1.4 -0 -1.4 0.36 0.64 0 1 -0 --1 -0 -1.8 0.4 0.68 0 1 -0 --1.4 -0 -1.8 0.36 0.68 0 1 -0 --1 -0 -1.4 0.4 0.64 0 1 -0 --1 -0 -1.8 0.4 0.68 0 1 -0 --1.4 -0 -1.4 0.36 0.64 0 1 -0 --1 -0 -1.4 0.4 0.64 0 1 -0 --0.6 -0 -1.8 0.44 0.68 0 1 -0 --1 -0 -1.8 0.4 0.68 0 1 -0 --0.6 -0 -1.4 0.44 0.64 0 1 -0 --0.6 -0 -1.8 0.44 0.68 0 1 -0 --1 -0 -1.4 0.4 0.64 0 1 -0 --0.6 -0 -1.4 0.44 0.64 0 1 -0 --0.2 -0 -1.8 0.48 0.68 0 1 -0 --0.6 -0 -1.8 0.44 0.68 0 1 -0 --0.2 -0 -1.4 0.48 0.64 0 1 -0 --0.2 -0 -1.8 0.48 0.68 0 1 -0 --0.6 -0 -1.4 0.44 0.64 0 1 -0 --0.2 -0 -1.4 0.48 0.64 0 1 -0 -0.2 -0 -1.8 0.52 0.68 0 1 -0 --0.2 -0 -1.8 0.48 0.68 0 1 -0 -0.2 -0 -1.4 0.52 0.64 0 1 -0 -0.2 -0 -1.8 0.52 0.68 0 1 -0 --0.2 -0 -1.4 0.48 0.64 0 1 -0 -0.2 -0 -1.4 0.52 0.64 0 1 -0 -0.6 -0 -1.8 0.56 0.68 0 1 -0 -0.2 -0 -1.8 0.52 0.68 0 1 -0 -0.6 -0 -1.4 0.56 0.64 0 1 -0 -0.6 -0 -1.8 0.56 0.68 0 1 -0 -0.2 -0 -1.4 0.52 0.64 0 1 -0 -0.6 -0 -1.4 0.56 0.64 0 1 -0 -1 -0 -1.8 0.6 0.68 0 1 -0 -0.6 -0 -1.8 0.56 0.68 0 1 -0 -1 -0 -1.4 0.6 0.64 0 1 -0 -1 -0 -1.8 0.6 0.68 0 1 -0 -0.6 -0 -1.4 0.56 0.64 0 1 -0 -1 -0 -1.4 0.6 0.64 0 1 -0 -1.4 -0 -1.8 0.64 0.68 0 1 -0 -1 -0 -1.8 0.6 0.68 0 1 -0 -1.4 -0 -1.4 0.64 0.64 0 1 -0 -1.4 -0 -1.8 0.64 0.68 0 1 -0 -1 -0 -1.4 0.6 0.64 0 1 -0 -1.4 -0 -1.4 0.64 0.64 0 1 -0 -1.8 -0 -1.8 0.68 0.68 0 1 -0 -1.4 -0 -1.8 0.64 0.68 0 1 -0 -1.8 -0 -1.4 0.68 0.64 0 1 -0 -1.8 -0 -1.8 0.68 0.68 0 1 -0 -1.4 -0 -1.4 0.64 0.64 0 1 -0 -1.8 -0 -1.4 0.68 0.64 0 1 -0 -2.2 -0 -1.8 0.72 0.68 0 1 -0 -1.8 -0 -1.8 0.68 0.68 0 1 -0 -2.2 -0 -1.4 0.72 0.64 0 1 -0 -2.2 -0 -1.8 0.72 0.68 0 1 -0 -1.8 -0 -1.4 0.68 0.64 0 1 -0 -2.2 -0 -1.4 0.72 0.64 0 1 -0 -2.6 -0 -1.8 0.76 0.68 0 1 -0 -2.2 -0 -1.8 0.72 0.68 0 1 -0 -2.6 -0 -1.4 0.76 0.64 0 1 -0 -2.6 -0 -1.8 0.76 0.68 0 1 -0 -2.2 -0 -1.4 0.72 0.64 0 1 -0 -2.6 -0 -1.4 0.76 0.64 0 1 -0 -3 -0 -1.8 0.8 0.68 0 1 -0 -2.6 -0 -1.8 0.76 0.68 0 1 -0 -3 -0 -1.4 0.8 0.64 0 1 -0 -3 -0 -1.8 0.8 0.68 0 1 -0 -2.6 -0 -1.4 0.76 0.64 0 1 -0 -3 -0 -1.4 0.8 0.64 0 1 -0 -3.4 -0 -1.8 0.84 0.68 0 1 -0 -3 -0 -1.8 0.8 0.68 0 1 -0 -3.4 -0 -1.4 0.84 0.64 0 1 -0 -3.4 -0 -1.8 0.84 0.68 0 1 -0 -3 -0 -1.4 0.8 0.64 0 1 -0 -3.4 -0 -1.4 0.84 0.64 0 1 -0 -3.8 -0 -1.8 0.88 0.68 0 1 -0 -3.4 -0 -1.8 0.84 0.68 0 1 -0 -3.8 -0 -1.4 0.88 0.64 0 1 -0 -3.8 -0 -1.8 0.88 0.68 0 1 -0 -3.4 -0 -1.4 0.84 0.64 0 1 -0 -3.8 -0 -1.4 0.88 0.64 0 1 -0 -4.2 -0 -1.8 0.92 0.68 0 1 -0 -3.8 -0 -1.8 0.88 0.68 0 1 -0 -4.2 -0 -1.4 0.92 0.64 0 1 -0 -4.2 -0 -1.8 0.92 0.68 0 1 -0 -3.8 -0 -1.4 0.88 0.64 0 1 -0 -4.2 -0 -1.4 0.92 0.64 0 1 -0 -4.6 -0 -1.8 0.96 0.68 0 1 -0 -4.2 -0 -1.8 0.92 0.68 0 1 -0 -4.6 -0 -1.4 0.96 0.64 0 1 -0 -4.6 -0 -1.8 0.96 0.68 0 1 -0 -4.2 -0 -1.4 0.92 0.64 0 1 -0 -4.6 -0 -1.4 0.96 0.64 0 1 -0 -5 -0 -1.8 1 0.68 0 1 -0 -4.6 -0 -1.8 0.96 0.68 0 1 -0 -5 -0 -1.4 1 0.64 0 1 -0 -5 -0 -1.8 1 0.68 0 1 -0 -4.6 -0 -1.4 0.96 0.64 0 1 -0 --5 -0 -1 0 0.6 0 1 -0 --4.6 -0 -1.4 0.04 0.64 0 1 -0 --5 -0 -1.4 0 0.64 0 1 -0 --4.6 -0 -1 0.04 0.6 0 1 -0 --4.6 -0 -1.4 0.04 0.64 0 1 -0 --5 -0 -1 0 0.6 0 1 -0 --4.6 -0 -1 0.04 0.6 0 1 -0 --4.2 -0 -1.4 0.08 0.64 0 1 -0 --4.6 -0 -1.4 0.04 0.64 0 1 -0 --4.2 -0 -1 0.08 0.6 0 1 -0 --4.2 -0 -1.4 0.08 0.64 0 1 -0 --4.6 -0 -1 0.04 0.6 0 1 -0 --4.2 -0 -1 0.08 0.6 0 1 -0 --3.8 -0 -1.4 0.12 0.64 0 1 -0 --4.2 -0 -1.4 0.08 0.64 0 1 -0 --3.8 -0 -1 0.12 0.6 0 1 -0 --3.8 -0 -1.4 0.12 0.64 0 1 -0 --4.2 -0 -1 0.08 0.6 0 1 -0 --3.8 -0 -1 0.12 0.6 0 1 -0 --3.4 -0 -1.4 0.16 0.64 0 1 -0 --3.8 -0 -1.4 0.12 0.64 0 1 -0 --3.4 -0 -1 0.16 0.6 0 1 -0 --3.4 -0 -1.4 0.16 0.64 0 1 -0 --3.8 -0 -1 0.12 0.6 0 1 -0 --3.4 -0 -1 0.16 0.6 0 1 -0 --3 -0 -1.4 0.2 0.64 0 1 -0 --3.4 -0 -1.4 0.16 0.64 0 1 -0 --3 -0 -1 0.2 0.6 0 1 -0 --3 -0 -1.4 0.2 0.64 0 1 -0 --3.4 -0 -1 0.16 0.6 0 1 -0 --3 -0 -1 0.2 0.6 0 1 -0 --2.6 -0 -1.4 0.24 0.64 0 1 -0 --3 -0 -1.4 0.2 0.64 0 1 -0 --2.6 -0 -1 0.24 0.6 0 1 -0 --2.6 -0 -1.4 0.24 0.64 0 1 -0 --3 -0 -1 0.2 0.6 0 1 -0 --2.6 -0 -1 0.24 0.6 0 1 -0 --2.2 -0 -1.4 0.28 0.64 0 1 -0 --2.6 -0 -1.4 0.24 0.64 0 1 -0 --2.2 -0 -1 0.28 0.6 0 1 -0 --2.2 -0 -1.4 0.28 0.64 0 1 -0 --2.6 -0 -1 0.24 0.6 0 1 -0 --2.2 -0 -1 0.28 0.6 0 1 -0 --1.8 -0 -1.4 0.32 0.64 0 1 -0 --2.2 -0 -1.4 0.28 0.64 0 1 -0 --1.8 -0 -1 0.32 0.6 0 1 -0 --1.8 -0 -1.4 0.32 0.64 0 1 -0 --2.2 -0 -1 0.28 0.6 0 1 -0 --1.8 -0 -1 0.32 0.6 0 1 -0 --1.4 -0 -1.4 0.36 0.64 0 1 -0 --1.8 -0 -1.4 0.32 0.64 0 1 -0 --1.4 -0 -1 0.36 0.6 0 1 -0 --1.4 -0 -1.4 0.36 0.64 0 1 -0 --1.8 -0 -1 0.32 0.6 0 1 -0 --1.4 -0 -1 0.36 0.6 0 1 -0 --1 -0 -1.4 0.4 0.64 0 1 -0 --1.4 -0 -1.4 0.36 0.64 0 1 -0 --1 -0 -1 0.4 0.6 0 1 -0 --1 -0 -1.4 0.4 0.64 0 1 -0 --1.4 -0 -1 0.36 0.6 0 1 -0 --1 -0 -1 0.4 0.6 0 1 -0 --0.6 -0 -1.4 0.44 0.64 0 1 -0 --1 -0 -1.4 0.4 0.64 0 1 -0 --0.6 -0 -1 0.44 0.6 0 1 -0 --0.6 -0 -1.4 0.44 0.64 0 1 -0 --1 -0 -1 0.4 0.6 0 1 -0 --0.6 -0 -1 0.44 0.6 0 1 -0 --0.2 -0 -1.4 0.48 0.64 0 1 -0 --0.6 -0 -1.4 0.44 0.64 0 1 -0 --0.2 -0 -1 0.48 0.6 0 1 -0 --0.2 -0 -1.4 0.48 0.64 0 1 -0 --0.6 -0 -1 0.44 0.6 0 1 -0 --0.2 -0 -1 0.48 0.6 0 1 -0 -0.2 -0 -1.4 0.52 0.64 0 1 -0 --0.2 -0 -1.4 0.48 0.64 0 1 -0 -0.2 -0 -1 0.52 0.6 0 1 -0 -0.2 -0 -1.4 0.52 0.64 0 1 -0 --0.2 -0 -1 0.48 0.6 0 1 -0 -0.2 -0 -1 0.52 0.6 0 1 -0 -0.6 -0 -1.4 0.56 0.64 0 1 -0 -0.2 -0 -1.4 0.52 0.64 0 1 -0 -0.6 -0 -1 0.56 0.6 0 1 -0 -0.6 -0 -1.4 0.56 0.64 0 1 -0 -0.2 -0 -1 0.52 0.6 0 1 -0 -0.6 -0 -1 0.56 0.6 0 1 -0 -1 -0 -1.4 0.6 0.64 0 1 -0 -0.6 -0 -1.4 0.56 0.64 0 1 -0 -1 -0 -1 0.6 0.6 0 1 -0 -1 -0 -1.4 0.6 0.64 0 1 -0 -0.6 -0 -1 0.56 0.6 0 1 -0 -1 -0 -1 0.6 0.6 0 1 -0 -1.4 -0 -1.4 0.64 0.64 0 1 -0 -1 -0 -1.4 0.6 0.64 0 1 -0 -1.4 -0 -1 0.64 0.6 0 1 -0 -1.4 -0 -1.4 0.64 0.64 0 1 -0 -1 -0 -1 0.6 0.6 0 1 -0 -1.4 -0 -1 0.64 0.6 0 1 -0 -1.8 -0 -1.4 0.68 0.64 0 1 -0 -1.4 -0 -1.4 0.64 0.64 0 1 -0 -1.8 -0 -1 0.68 0.6 0 1 -0 -1.8 -0 -1.4 0.68 0.64 0 1 -0 -1.4 -0 -1 0.64 0.6 0 1 -0 -1.8 -0 -1 0.68 0.6 0 1 -0 -2.2 -0 -1.4 0.72 0.64 0 1 -0 -1.8 -0 -1.4 0.68 0.64 0 1 -0 -2.2 -0 -1 0.72 0.6 0 1 -0 -2.2 -0 -1.4 0.72 0.64 0 1 -0 -1.8 -0 -1 0.68 0.6 0 1 -0 -2.2 -0 -1 0.72 0.6 0 1 -0 -2.6 -0 -1.4 0.76 0.64 0 1 -0 -2.2 -0 -1.4 0.72 0.64 0 1 -0 -2.6 -0 -1 0.76 0.6 0 1 -0 -2.6 -0 -1.4 0.76 0.64 0 1 -0 -2.2 -0 -1 0.72 0.6 0 1 -0 -2.6 -0 -1 0.76 0.6 0 1 -0 -3 -0 -1.4 0.8 0.64 0 1 -0 -2.6 -0 -1.4 0.76 0.64 0 1 -0 -3 -0 -1 0.8 0.6 0 1 -0 -3 -0 -1.4 0.8 0.64 0 1 -0 -2.6 -0 -1 0.76 0.6 0 1 -0 -3 -0 -1 0.8 0.6 0 1 -0 -3.4 -0 -1.4 0.84 0.64 0 1 -0 -3 -0 -1.4 0.8 0.64 0 1 -0 -3.4 -0 -1 0.84 0.6 0 1 -0 -3.4 -0 -1.4 0.84 0.64 0 1 -0 -3 -0 -1 0.8 0.6 0 1 -0 -3.4 -0 -1 0.84 0.6 0 1 -0 -3.8 -0 -1.4 0.88 0.64 0 1 -0 -3.4 -0 -1.4 0.84 0.64 0 1 -0 -3.8 -0 -1 0.88 0.6 0 1 -0 -3.8 -0 -1.4 0.88 0.64 0 1 -0 -3.4 -0 -1 0.84 0.6 0 1 -0 -3.8 -0 -1 0.88 0.6 0 1 -0 -4.2 -0 -1.4 0.92 0.64 0 1 -0 -3.8 -0 -1.4 0.88 0.64 0 1 -0 -4.2 -0 -1 0.92 0.6 0 1 -0 -4.2 -0 -1.4 0.92 0.64 0 1 -0 -3.8 -0 -1 0.88 0.6 0 1 -0 -4.2 -0 -1 0.92 0.6 0 1 -0 -4.6 -0 -1.4 0.96 0.64 0 1 -0 -4.2 -0 -1.4 0.92 0.64 0 1 -0 -4.6 -0 -1 0.96 0.6 0 1 -0 -4.6 -0 -1.4 0.96 0.64 0 1 -0 -4.2 -0 -1 0.92 0.6 0 1 -0 -4.6 -0 -1 0.96 0.6 0 1 -0 -5 -0 -1.4 1 0.64 0 1 -0 -4.6 -0 -1.4 0.96 0.64 0 1 -0 -5 -0 -1 1 0.6 0 1 -0 -5 -0 -1.4 1 0.64 0 1 -0 -4.6 -0 -1 0.96 0.6 0 1 -0 --5 -0 -0.6 0 0.56 0 1 -0 --4.6 -0 -1 0.04 0.6 0 1 -0 --5 -0 -1 0 0.6 0 1 -0 --4.6 -0 -0.6 0.04 0.56 0 1 -0 --4.6 -0 -1 0.04 0.6 0 1 -0 --5 -0 -0.6 0 0.56 0 1 -0 --4.6 -0 -0.6 0.04 0.56 0 1 -0 --4.2 -0 -1 0.08 0.6 0 1 -0 --4.6 -0 -1 0.04 0.6 0 1 -0 --4.2 -0 -0.6 0.08 0.56 0 1 -0 --4.2 -0 -1 0.08 0.6 0 1 -0 --4.6 -0 -0.6 0.04 0.56 0 1 -0 --4.2 -0 -0.6 0.08 0.56 0 1 -0 --3.8 -0 -1 0.12 0.6 0 1 -0 --4.2 -0 -1 0.08 0.6 0 1 -0 --3.8 -0 -0.6 0.12 0.56 0 1 -0 --3.8 -0 -1 0.12 0.6 0 1 -0 --4.2 -0 -0.6 0.08 0.56 0 1 -0 --3.8 -0 -0.6 0.12 0.56 0 1 -0 --3.4 -0 -1 0.16 0.6 0 1 -0 --3.8 -0 -1 0.12 0.6 0 1 -0 --3.4 -0 -0.6 0.16 0.56 0 1 -0 --3.4 -0 -1 0.16 0.6 0 1 -0 --3.8 -0 -0.6 0.12 0.56 0 1 -0 --3.4 -0 -0.6 0.16 0.56 0 1 -0 --3 -0 -1 0.2 0.6 0 1 -0 --3.4 -0 -1 0.16 0.6 0 1 -0 --3 -0 -0.6 0.2 0.56 0 1 -0 --3 -0 -1 0.2 0.6 0 1 -0 --3.4 -0 -0.6 0.16 0.56 0 1 -0 --3 -0 -0.6 0.2 0.56 0 1 -0 --2.6 -0 -1 0.24 0.6 0 1 -0 --3 -0 -1 0.2 0.6 0 1 -0 --2.6 -0 -0.6 0.24 0.56 0 1 -0 --2.6 -0 -1 0.24 0.6 0 1 -0 --3 -0 -0.6 0.2 0.56 0 1 -0 --2.6 -0 -0.6 0.24 0.56 0 1 -0 --2.2 -0 -1 0.28 0.6 0 1 -0 --2.6 -0 -1 0.24 0.6 0 1 -0 --2.2 -0 -0.6 0.28 0.56 0 1 -0 --2.2 -0 -1 0.28 0.6 0 1 -0 --2.6 -0 -0.6 0.24 0.56 0 1 -0 --2.2 -0 -0.6 0.28 0.56 0 1 -0 --1.8 -0 -1 0.32 0.6 0 1 -0 --2.2 -0 -1 0.28 0.6 0 1 -0 --1.8 -0 -0.6 0.32 0.56 0 1 -0 --1.8 -0 -1 0.32 0.6 0 1 -0 --2.2 -0 -0.6 0.28 0.56 0 1 -0 --1.8 -0 -0.6 0.32 0.56 0 1 -0 --1.4 -0 -1 0.36 0.6 0 1 -0 --1.8 -0 -1 0.32 0.6 0 1 -0 --1.4 -0 -0.6 0.36 0.56 0 1 -0 --1.4 -0 -1 0.36 0.6 0 1 -0 --1.8 -0 -0.6 0.32 0.56 0 1 -0 --1.4 -0 -0.6 0.36 0.56 0 1 -0 --1 -0 -1 0.4 0.6 0 1 -0 --1.4 -0 -1 0.36 0.6 0 1 -0 --1 -0 -0.6 0.4 0.56 0 1 -0 --1 -0 -1 0.4 0.6 0 1 -0 --1.4 -0 -0.6 0.36 0.56 0 1 -0 --1 -0 -0.6 0.4 0.56 0 1 -0 --0.6 -0 -1 0.44 0.6 0 1 -0 --1 -0 -1 0.4 0.6 0 1 -0 --0.6 -0 -0.6 0.44 0.56 0 1 -0 --0.6 -0 -1 0.44 0.6 0 1 -0 --1 -0 -0.6 0.4 0.56 0 1 -0 --0.6 -0 -0.6 0.44 0.56 0 1 -0 --0.2 -0 -1 0.48 0.6 0 1 -0 --0.6 -0 -1 0.44 0.6 0 1 -0 --0.2 -0 -0.6 0.48 0.56 0 1 -0 --0.2 -0 -1 0.48 0.6 0 1 -0 --0.6 -0 -0.6 0.44 0.56 0 1 -0 --0.2 -0 -0.6 0.48 0.56 0 1 -0 -0.2 -0 -1 0.52 0.6 0 1 -0 --0.2 -0 -1 0.48 0.6 0 1 -0 -0.2 -0 -0.6 0.52 0.56 0 1 -0 -0.2 -0 -1 0.52 0.6 0 1 -0 --0.2 -0 -0.6 0.48 0.56 0 1 -0 -0.2 -0 -0.6 0.52 0.56 0 1 -0 -0.6 -0 -1 0.56 0.6 0 1 -0 -0.2 -0 -1 0.52 0.6 0 1 -0 -0.6 -0 -0.6 0.56 0.56 0 1 -0 -0.6 -0 -1 0.56 0.6 0 1 -0 -0.2 -0 -0.6 0.52 0.56 0 1 -0 -0.6 -0 -0.6 0.56 0.56 0 1 -0 -1 -0 -1 0.6 0.6 0 1 -0 -0.6 -0 -1 0.56 0.6 0 1 -0 -1 -0 -0.6 0.6 0.56 0 1 -0 -1 -0 -1 0.6 0.6 0 1 -0 -0.6 -0 -0.6 0.56 0.56 0 1 -0 -1 -0 -0.6 0.6 0.56 0 1 -0 -1.4 -0 -1 0.64 0.6 0 1 -0 -1 -0 -1 0.6 0.6 0 1 -0 -1.4 -0 -0.6 0.64 0.56 0 1 -0 -1.4 -0 -1 0.64 0.6 0 1 -0 -1 -0 -0.6 0.6 0.56 0 1 -0 -1.4 -0 -0.6 0.64 0.56 0 1 -0 -1.8 -0 -1 0.68 0.6 0 1 -0 -1.4 -0 -1 0.64 0.6 0 1 -0 -1.8 -0 -0.6 0.68 0.56 0 1 -0 -1.8 -0 -1 0.68 0.6 0 1 -0 -1.4 -0 -0.6 0.64 0.56 0 1 -0 -1.8 -0 -0.6 0.68 0.56 0 1 -0 -2.2 -0 -1 0.72 0.6 0 1 -0 -1.8 -0 -1 0.68 0.6 0 1 -0 -2.2 -0 -0.6 0.72 0.56 0 1 -0 -2.2 -0 -1 0.72 0.6 0 1 -0 -1.8 -0 -0.6 0.68 0.56 0 1 -0 -2.2 -0 -0.6 0.72 0.56 0 1 -0 -2.6 -0 -1 0.76 0.6 0 1 -0 -2.2 -0 -1 0.72 0.6 0 1 -0 -2.6 -0 -0.6 0.76 0.56 0 1 -0 -2.6 -0 -1 0.76 0.6 0 1 -0 -2.2 -0 -0.6 0.72 0.56 0 1 -0 -2.6 -0 -0.6 0.76 0.56 0 1 -0 -3 -0 -1 0.8 0.6 0 1 -0 -2.6 -0 -1 0.76 0.6 0 1 -0 -3 -0 -0.6 0.8 0.56 0 1 -0 -3 -0 -1 0.8 0.6 0 1 -0 -2.6 -0 -0.6 0.76 0.56 0 1 -0 -3 -0 -0.6 0.8 0.56 0 1 -0 -3.4 -0 -1 0.84 0.6 0 1 -0 -3 -0 -1 0.8 0.6 0 1 -0 -3.4 -0 -0.6 0.84 0.56 0 1 -0 -3.4 -0 -1 0.84 0.6 0 1 -0 -3 -0 -0.6 0.8 0.56 0 1 -0 -3.4 -0 -0.6 0.84 0.56 0 1 -0 -3.8 -0 -1 0.88 0.6 0 1 -0 -3.4 -0 -1 0.84 0.6 0 1 -0 -3.8 -0 -0.6 0.88 0.56 0 1 -0 -3.8 -0 -1 0.88 0.6 0 1 -0 -3.4 -0 -0.6 0.84 0.56 0 1 -0 -3.8 -0 -0.6 0.88 0.56 0 1 -0 -4.2 -0 -1 0.92 0.6 0 1 -0 -3.8 -0 -1 0.88 0.6 0 1 -0 -4.2 -0 -0.6 0.92 0.56 0 1 -0 -4.2 -0 -1 0.92 0.6 0 1 -0 -3.8 -0 -0.6 0.88 0.56 0 1 -0 -4.2 -0 -0.6 0.92 0.56 0 1 -0 -4.6 -0 -1 0.96 0.6 0 1 -0 -4.2 -0 -1 0.92 0.6 0 1 -0 -4.6 -0 -0.6 0.96 0.56 0 1 -0 -4.6 -0 -1 0.96 0.6 0 1 -0 -4.2 -0 -0.6 0.92 0.56 0 1 -0 -4.6 -0 -0.6 0.96 0.56 0 1 -0 -5 -0 -1 1 0.6 0 1 -0 -4.6 -0 -1 0.96 0.6 0 1 -0 -5 -0 -0.6 1 0.56 0 1 -0 -5 -0 -1 1 0.6 0 1 -0 -4.6 -0 -0.6 0.96 0.56 0 1 -0 --5 -0 -0.2 0 0.52 0 1 -0 --4.6 -0 -0.6 0.04 0.56 0 1 -0 --5 -0 -0.6 0 0.56 0 1 -0 --4.6 -0 -0.2 0.04 0.52 0 1 -0 --4.6 -0 -0.6 0.04 0.56 0 1 -0 --5 -0 -0.2 0 0.52 0 1 -0 --4.6 -0 -0.2 0.04 0.52 0 1 -0 --4.2 -0 -0.6 0.08 0.56 0 1 -0 --4.6 -0 -0.6 0.04 0.56 0 1 -0 --4.2 -0 -0.2 0.08 0.52 0 1 -0 --4.2 -0 -0.6 0.08 0.56 0 1 -0 --4.6 -0 -0.2 0.04 0.52 0 1 -0 --4.2 -0 -0.2 0.08 0.52 0 1 -0 --3.8 -0 -0.6 0.12 0.56 0 1 -0 --4.2 -0 -0.6 0.08 0.56 0 1 -0 --3.8 -0 -0.2 0.12 0.52 0 1 -0 --3.8 -0 -0.6 0.12 0.56 0 1 -0 --4.2 -0 -0.2 0.08 0.52 0 1 -0 --3.8 -0 -0.2 0.12 0.52 0 1 -0 --3.4 -0 -0.6 0.16 0.56 0 1 -0 --3.8 -0 -0.6 0.12 0.56 0 1 -0 --3.4 -0 -0.2 0.16 0.52 0 1 -0 --3.4 -0 -0.6 0.16 0.56 0 1 -0 --3.8 -0 -0.2 0.12 0.52 0 1 -0 --3.4 -0 -0.2 0.16 0.52 0 1 -0 --3 -0 -0.6 0.2 0.56 0 1 -0 --3.4 -0 -0.6 0.16 0.56 0 1 -0 --3 -0 -0.2 0.2 0.52 0 1 -0 --3 -0 -0.6 0.2 0.56 0 1 -0 --3.4 -0 -0.2 0.16 0.52 0 1 -0 --3 -0 -0.2 0.2 0.52 0 1 -0 --2.6 -0 -0.6 0.24 0.56 0 1 -0 --3 -0 -0.6 0.2 0.56 0 1 -0 --2.6 -0 -0.2 0.24 0.52 0 1 -0 --2.6 -0 -0.6 0.24 0.56 0 1 -0 --3 -0 -0.2 0.2 0.52 0 1 -0 --2.6 -0 -0.2 0.24 0.52 0 1 -0 --2.2 -0 -0.6 0.28 0.56 0 1 -0 --2.6 -0 -0.6 0.24 0.56 0 1 -0 --2.2 -0 -0.2 0.28 0.52 0 1 -0 --2.2 -0 -0.6 0.28 0.56 0 1 -0 --2.6 -0 -0.2 0.24 0.52 0 1 -0 --2.2 -0 -0.2 0.28 0.52 0 1 -0 --1.8 -0 -0.6 0.32 0.56 0 1 -0 --2.2 -0 -0.6 0.28 0.56 0 1 -0 --1.8 -0 -0.2 0.32 0.52 0 1 -0 --1.8 -0 -0.6 0.32 0.56 0 1 -0 --2.2 -0 -0.2 0.28 0.52 0 1 -0 --1.8 -0 -0.2 0.32 0.52 0 1 -0 --1.4 -0 -0.6 0.36 0.56 0 1 -0 --1.8 -0 -0.6 0.32 0.56 0 1 -0 --1.4 -0 -0.2 0.36 0.52 0 1 -0 --1.4 -0 -0.6 0.36 0.56 0 1 -0 --1.8 -0 -0.2 0.32 0.52 0 1 -0 --1.4 -0 -0.2 0.36 0.52 0 1 -0 --1 -0 -0.6 0.4 0.56 0 1 -0 --1.4 -0 -0.6 0.36 0.56 0 1 -0 --1 -0 -0.2 0.4 0.52 0 1 -0 --1 -0 -0.6 0.4 0.56 0 1 -0 --1.4 -0 -0.2 0.36 0.52 0 1 -0 --1 -0 -0.2 0.4 0.52 0 1 -0 --0.6 -0 -0.6 0.44 0.56 0 1 -0 --1 -0 -0.6 0.4 0.56 0 1 -0 --0.6 -0 -0.2 0.44 0.52 0 1 -0 --0.6 -0 -0.6 0.44 0.56 0 1 -0 --1 -0 -0.2 0.4 0.52 0 1 -0 --0.6 -0 -0.2 0.44 0.52 0 1 -0 --0.2 -0 -0.6 0.48 0.56 0 1 -0 --0.6 -0 -0.6 0.44 0.56 0 1 -0 --0.2 -0 -0.2 0.48 0.52 0 1 -0 --0.2 -0 -0.6 0.48 0.56 0 1 -0 --0.6 -0 -0.2 0.44 0.52 0 1 -0 --0.2 -0 -0.2 0.48 0.52 0 1 -0 -0.2 -0 -0.6 0.52 0.56 0 1 -0 --0.2 -0 -0.6 0.48 0.56 0 1 -0 -0.2 -0 -0.2 0.52 0.52 0 1 -0 -0.2 -0 -0.6 0.52 0.56 0 1 -0 --0.2 -0 -0.2 0.48 0.52 0 1 -0 -0.2 -0 -0.2 0.52 0.52 0 1 -0 -0.6 -0 -0.6 0.56 0.56 0 1 -0 -0.2 -0 -0.6 0.52 0.56 0 1 -0 -0.6 -0 -0.2 0.56 0.52 0 1 -0 -0.6 -0 -0.6 0.56 0.56 0 1 -0 -0.2 -0 -0.2 0.52 0.52 0 1 -0 -0.6 -0 -0.2 0.56 0.52 0 1 -0 -1 -0 -0.6 0.6 0.56 0 1 -0 -0.6 -0 -0.6 0.56 0.56 0 1 -0 -1 -0 -0.2 0.6 0.52 0 1 -0 -1 -0 -0.6 0.6 0.56 0 1 -0 -0.6 -0 -0.2 0.56 0.52 0 1 -0 -1 -0 -0.2 0.6 0.52 0 1 -0 -1.4 -0 -0.6 0.64 0.56 0 1 -0 -1 -0 -0.6 0.6 0.56 0 1 -0 -1.4 -0 -0.2 0.64 0.52 0 1 -0 -1.4 -0 -0.6 0.64 0.56 0 1 -0 -1 -0 -0.2 0.6 0.52 0 1 -0 -1.4 -0 -0.2 0.64 0.52 0 1 -0 -1.8 -0 -0.6 0.68 0.56 0 1 -0 -1.4 -0 -0.6 0.64 0.56 0 1 -0 -1.8 -0 -0.2 0.68 0.52 0 1 -0 -1.8 -0 -0.6 0.68 0.56 0 1 -0 -1.4 -0 -0.2 0.64 0.52 0 1 -0 -1.8 -0 -0.2 0.68 0.52 0 1 -0 -2.2 -0 -0.6 0.72 0.56 0 1 -0 -1.8 -0 -0.6 0.68 0.56 0 1 -0 -2.2 -0 -0.2 0.72 0.52 0 1 -0 -2.2 -0 -0.6 0.72 0.56 0 1 -0 -1.8 -0 -0.2 0.68 0.52 0 1 -0 -2.2 -0 -0.2 0.72 0.52 0 1 -0 -2.6 -0 -0.6 0.76 0.56 0 1 -0 -2.2 -0 -0.6 0.72 0.56 0 1 -0 -2.6 -0 -0.2 0.76 0.52 0 1 -0 -2.6 -0 -0.6 0.76 0.56 0 1 -0 -2.2 -0 -0.2 0.72 0.52 0 1 -0 -2.6 -0 -0.2 0.76 0.52 0 1 -0 -3 -0 -0.6 0.8 0.56 0 1 -0 -2.6 -0 -0.6 0.76 0.56 0 1 -0 -3 -0 -0.2 0.8 0.52 0 1 -0 -3 -0 -0.6 0.8 0.56 0 1 -0 -2.6 -0 -0.2 0.76 0.52 0 1 -0 -3 -0 -0.2 0.8 0.52 0 1 -0 -3.4 -0 -0.6 0.84 0.56 0 1 -0 -3 -0 -0.6 0.8 0.56 0 1 -0 -3.4 -0 -0.2 0.84 0.52 0 1 -0 -3.4 -0 -0.6 0.84 0.56 0 1 -0 -3 -0 -0.2 0.8 0.52 0 1 -0 -3.4 -0 -0.2 0.84 0.52 0 1 -0 -3.8 -0 -0.6 0.88 0.56 0 1 -0 -3.4 -0 -0.6 0.84 0.56 0 1 -0 -3.8 -0 -0.2 0.88 0.52 0 1 -0 -3.8 -0 -0.6 0.88 0.56 0 1 -0 -3.4 -0 -0.2 0.84 0.52 0 1 -0 -3.8 -0 -0.2 0.88 0.52 0 1 -0 -4.2 -0 -0.6 0.92 0.56 0 1 -0 -3.8 -0 -0.6 0.88 0.56 0 1 -0 -4.2 -0 -0.2 0.92 0.52 0 1 -0 -4.2 -0 -0.6 0.92 0.56 0 1 -0 -3.8 -0 -0.2 0.88 0.52 0 1 -0 -4.2 -0 -0.2 0.92 0.52 0 1 -0 -4.6 -0 -0.6 0.96 0.56 0 1 -0 -4.2 -0 -0.6 0.92 0.56 0 1 -0 -4.6 -0 -0.2 0.96 0.52 0 1 -0 -4.6 -0 -0.6 0.96 0.56 0 1 -0 -4.2 -0 -0.2 0.92 0.52 0 1 -0 -4.6 -0 -0.2 0.96 0.52 0 1 -0 -5 -0 -0.6 1 0.56 0 1 -0 -4.6 -0 -0.6 0.96 0.56 0 1 -0 -5 -0 -0.2 1 0.52 0 1 -0 -5 -0 -0.6 1 0.56 0 1 -0 -4.6 -0 -0.2 0.96 0.52 0 1 -0 --5 0 0.2 0 0.48 0 1 -0 --4.6 -0 -0.2 0.04 0.52 0 1 -0 --5 -0 -0.2 0 0.52 0 1 -0 --4.6 0 0.2 0.04 0.48 0 1 -0 --4.6 -0 -0.2 0.04 0.52 0 1 -0 --5 0 0.2 0 0.48 0 1 -0 --4.6 0 0.2 0.04 0.48 0 1 -0 --4.2 -0 -0.2 0.08 0.52 0 1 -0 --4.6 -0 -0.2 0.04 0.52 0 1 -0 --4.2 0 0.2 0.08 0.48 0 1 -0 --4.2 -0 -0.2 0.08 0.52 0 1 -0 --4.6 0 0.2 0.04 0.48 0 1 -0 --4.2 0 0.2 0.08 0.48 0 1 -0 --3.8 -0 -0.2 0.12 0.52 0 1 -0 --4.2 -0 -0.2 0.08 0.52 0 1 -0 --3.8 0 0.2 0.12 0.48 0 1 -0 --3.8 -0 -0.2 0.12 0.52 0 1 -0 --4.2 0 0.2 0.08 0.48 0 1 -0 --3.8 0 0.2 0.12 0.48 0 1 -0 --3.4 -0 -0.2 0.16 0.52 0 1 -0 --3.8 -0 -0.2 0.12 0.52 0 1 -0 --3.4 0 0.2 0.16 0.48 0 1 -0 --3.4 -0 -0.2 0.16 0.52 0 1 -0 --3.8 0 0.2 0.12 0.48 0 1 -0 --3.4 0 0.2 0.16 0.48 0 1 -0 --3 -0 -0.2 0.2 0.52 0 1 -0 --3.4 -0 -0.2 0.16 0.52 0 1 -0 --3 0 0.2 0.2 0.48 0 1 -0 --3 -0 -0.2 0.2 0.52 0 1 -0 --3.4 0 0.2 0.16 0.48 0 1 -0 --3 0 0.2 0.2 0.48 0 1 -0 --2.6 -0 -0.2 0.24 0.52 0 1 -0 --3 -0 -0.2 0.2 0.52 0 1 -0 --2.6 0 0.2 0.24 0.48 0 1 -0 --2.6 -0 -0.2 0.24 0.52 0 1 -0 --3 0 0.2 0.2 0.48 0 1 -0 --2.6 0 0.2 0.24 0.48 0 1 -0 --2.2 -0 -0.2 0.28 0.52 0 1 -0 --2.6 -0 -0.2 0.24 0.52 0 1 -0 --2.2 0 0.2 0.28 0.48 0 1 -0 --2.2 -0 -0.2 0.28 0.52 0 1 -0 --2.6 0 0.2 0.24 0.48 0 1 -0 --2.2 0 0.2 0.28 0.48 0 1 -0 --1.8 -0 -0.2 0.32 0.52 0 1 -0 --2.2 -0 -0.2 0.28 0.52 0 1 -0 --1.8 0 0.2 0.32 0.48 0 1 -0 --1.8 -0 -0.2 0.32 0.52 0 1 -0 --2.2 0 0.2 0.28 0.48 0 1 -0 --1.8 0 0.2 0.32 0.48 0 1 -0 --1.4 -0 -0.2 0.36 0.52 0 1 -0 --1.8 -0 -0.2 0.32 0.52 0 1 -0 --1.4 0 0.2 0.36 0.48 0 1 -0 --1.4 -0 -0.2 0.36 0.52 0 1 -0 --1.8 0 0.2 0.32 0.48 0 1 -0 --1.4 0 0.2 0.36 0.48 0 1 -0 --1 -0 -0.2 0.4 0.52 0 1 -0 --1.4 -0 -0.2 0.36 0.52 0 1 -0 --1 0 0.2 0.4 0.48 0 1 -0 --1 -0 -0.2 0.4 0.52 0 1 -0 --1.4 0 0.2 0.36 0.48 0 1 -0 --1 0 0.2 0.4 0.48 0 1 -0 --0.6 -0 -0.2 0.44 0.52 0 1 -0 --1 -0 -0.2 0.4 0.52 0 1 -0 --0.6 0 0.2 0.44 0.48 0 1 -0 --0.6 -0 -0.2 0.44 0.52 0 1 -0 --1 0 0.2 0.4 0.48 0 1 -0 --0.6 0 0.2 0.44 0.48 0 1 -0 --0.2 -0 -0.2 0.48 0.52 0 1 -0 --0.6 -0 -0.2 0.44 0.52 0 1 -0 --0.2 0 0.2 0.48 0.48 0 1 -0 --0.2 -0 -0.2 0.48 0.52 0 1 -0 --0.6 0 0.2 0.44 0.48 0 1 -0 --0.2 0 0.2 0.48 0.48 0 1 -0 -0.2 -0 -0.2 0.52 0.52 0 1 -0 --0.2 -0 -0.2 0.48 0.52 0 1 -0 -0.2 0 0.2 0.52 0.48 0 1 -0 -0.2 -0 -0.2 0.52 0.52 0 1 -0 --0.2 0 0.2 0.48 0.48 0 1 -0 -0.2 0 0.2 0.52 0.48 0 1 -0 -0.6 -0 -0.2 0.56 0.52 0 1 -0 -0.2 -0 -0.2 0.52 0.52 0 1 -0 -0.6 0 0.2 0.56 0.48 0 1 -0 -0.6 -0 -0.2 0.56 0.52 0 1 -0 -0.2 0 0.2 0.52 0.48 0 1 -0 -0.6 0 0.2 0.56 0.48 0 1 -0 -1 -0 -0.2 0.6 0.52 0 1 -0 -0.6 -0 -0.2 0.56 0.52 0 1 -0 -1 0 0.2 0.6 0.48 0 1 -0 -1 -0 -0.2 0.6 0.52 0 1 -0 -0.6 0 0.2 0.56 0.48 0 1 -0 -1 0 0.2 0.6 0.48 0 1 -0 -1.4 -0 -0.2 0.64 0.52 0 1 -0 -1 -0 -0.2 0.6 0.52 0 1 -0 -1.4 0 0.2 0.64 0.48 0 1 -0 -1.4 -0 -0.2 0.64 0.52 0 1 -0 -1 0 0.2 0.6 0.48 0 1 -0 -1.4 0 0.2 0.64 0.48 0 1 -0 -1.8 -0 -0.2 0.68 0.52 0 1 -0 -1.4 -0 -0.2 0.64 0.52 0 1 -0 -1.8 0 0.2 0.68 0.48 0 1 -0 -1.8 -0 -0.2 0.68 0.52 0 1 -0 -1.4 0 0.2 0.64 0.48 0 1 -0 -1.8 0 0.2 0.68 0.48 0 1 -0 -2.2 -0 -0.2 0.72 0.52 0 1 -0 -1.8 -0 -0.2 0.68 0.52 0 1 -0 -2.2 0 0.2 0.72 0.48 0 1 -0 -2.2 -0 -0.2 0.72 0.52 0 1 -0 -1.8 0 0.2 0.68 0.48 0 1 -0 -2.2 0 0.2 0.72 0.48 0 1 -0 -2.6 -0 -0.2 0.76 0.52 0 1 -0 -2.2 -0 -0.2 0.72 0.52 0 1 -0 -2.6 0 0.2 0.76 0.48 0 1 -0 -2.6 -0 -0.2 0.76 0.52 0 1 -0 -2.2 0 0.2 0.72 0.48 0 1 -0 -2.6 0 0.2 0.76 0.48 0 1 -0 -3 -0 -0.2 0.8 0.52 0 1 -0 -2.6 -0 -0.2 0.76 0.52 0 1 -0 -3 0 0.2 0.8 0.48 0 1 -0 -3 -0 -0.2 0.8 0.52 0 1 -0 -2.6 0 0.2 0.76 0.48 0 1 -0 -3 0 0.2 0.8 0.48 0 1 -0 -3.4 -0 -0.2 0.84 0.52 0 1 -0 -3 -0 -0.2 0.8 0.52 0 1 -0 -3.4 0 0.2 0.84 0.48 0 1 -0 -3.4 -0 -0.2 0.84 0.52 0 1 -0 -3 0 0.2 0.8 0.48 0 1 -0 -3.4 0 0.2 0.84 0.48 0 1 -0 -3.8 -0 -0.2 0.88 0.52 0 1 -0 -3.4 -0 -0.2 0.84 0.52 0 1 -0 -3.8 0 0.2 0.88 0.48 0 1 -0 -3.8 -0 -0.2 0.88 0.52 0 1 -0 -3.4 0 0.2 0.84 0.48 0 1 -0 -3.8 0 0.2 0.88 0.48 0 1 -0 -4.2 -0 -0.2 0.92 0.52 0 1 -0 -3.8 -0 -0.2 0.88 0.52 0 1 -0 -4.2 0 0.2 0.92 0.48 0 1 -0 -4.2 -0 -0.2 0.92 0.52 0 1 -0 -3.8 0 0.2 0.88 0.48 0 1 -0 -4.2 0 0.2 0.92 0.48 0 1 -0 -4.6 -0 -0.2 0.96 0.52 0 1 -0 -4.2 -0 -0.2 0.92 0.52 0 1 -0 -4.6 0 0.2 0.96 0.48 0 1 -0 -4.6 -0 -0.2 0.96 0.52 0 1 -0 -4.2 0 0.2 0.92 0.48 0 1 -0 -4.6 0 0.2 0.96 0.48 0 1 -0 -5 -0 -0.2 1 0.52 0 1 -0 -4.6 -0 -0.2 0.96 0.52 0 1 -0 -5 0 0.2 1 0.48 0 1 -0 -5 -0 -0.2 1 0.52 0 1 -0 -4.6 0 0.2 0.96 0.48 0 1 -0 --5 0 0.6 0 0.44 0 1 -0 --4.6 0 0.2 0.04 0.48 0 1 -0 --5 0 0.2 0 0.48 0 1 -0 --4.6 0 0.6 0.04 0.44 0 1 -0 --4.6 0 0.2 0.04 0.48 0 1 -0 --5 0 0.6 0 0.44 0 1 -0 --4.6 0 0.6 0.04 0.44 0 1 -0 --4.2 0 0.2 0.08 0.48 0 1 -0 --4.6 0 0.2 0.04 0.48 0 1 -0 --4.2 0 0.6 0.08 0.44 0 1 -0 --4.2 0 0.2 0.08 0.48 0 1 -0 --4.6 0 0.6 0.04 0.44 0 1 -0 --4.2 0 0.6 0.08 0.44 0 1 -0 --3.8 0 0.2 0.12 0.48 0 1 -0 --4.2 0 0.2 0.08 0.48 0 1 -0 --3.8 0 0.6 0.12 0.44 0 1 -0 --3.8 0 0.2 0.12 0.48 0 1 -0 --4.2 0 0.6 0.08 0.44 0 1 -0 --3.8 0 0.6 0.12 0.44 0 1 -0 --3.4 0 0.2 0.16 0.48 0 1 -0 --3.8 0 0.2 0.12 0.48 0 1 -0 --3.4 0 0.6 0.16 0.44 0 1 -0 --3.4 0 0.2 0.16 0.48 0 1 -0 --3.8 0 0.6 0.12 0.44 0 1 -0 --3.4 0 0.6 0.16 0.44 0 1 -0 --3 0 0.2 0.2 0.48 0 1 -0 --3.4 0 0.2 0.16 0.48 0 1 -0 --3 0 0.6 0.2 0.44 0 1 -0 --3 0 0.2 0.2 0.48 0 1 -0 --3.4 0 0.6 0.16 0.44 0 1 -0 --3 0 0.6 0.2 0.44 0 1 -0 --2.6 0 0.2 0.24 0.48 0 1 -0 --3 0 0.2 0.2 0.48 0 1 -0 --2.6 0 0.6 0.24 0.44 0 1 -0 --2.6 0 0.2 0.24 0.48 0 1 -0 --3 0 0.6 0.2 0.44 0 1 -0 --2.6 0 0.6 0.24 0.44 0 1 -0 --2.2 0 0.2 0.28 0.48 0 1 -0 --2.6 0 0.2 0.24 0.48 0 1 -0 --2.2 0 0.6 0.28 0.44 0 1 -0 --2.2 0 0.2 0.28 0.48 0 1 -0 --2.6 0 0.6 0.24 0.44 0 1 -0 --2.2 0 0.6 0.28 0.44 0 1 -0 --1.8 0 0.2 0.32 0.48 0 1 -0 --2.2 0 0.2 0.28 0.48 0 1 -0 --1.8 0 0.6 0.32 0.44 0 1 -0 --1.8 0 0.2 0.32 0.48 0 1 -0 --2.2 0 0.6 0.28 0.44 0 1 -0 --1.8 0 0.6 0.32 0.44 0 1 -0 --1.4 0 0.2 0.36 0.48 0 1 -0 --1.8 0 0.2 0.32 0.48 0 1 -0 --1.4 0 0.6 0.36 0.44 0 1 -0 --1.4 0 0.2 0.36 0.48 0 1 -0 --1.8 0 0.6 0.32 0.44 0 1 -0 --1.4 0 0.6 0.36 0.44 0 1 -0 --1 0 0.2 0.4 0.48 0 1 -0 --1.4 0 0.2 0.36 0.48 0 1 -0 --1 0 0.6 0.4 0.44 0 1 -0 --1 0 0.2 0.4 0.48 0 1 -0 --1.4 0 0.6 0.36 0.44 0 1 -0 --1 0 0.6 0.4 0.44 0 1 -0 --0.6 0 0.2 0.44 0.48 0 1 -0 --1 0 0.2 0.4 0.48 0 1 -0 --0.6 0 0.6 0.44 0.44 0 1 -0 --0.6 0 0.2 0.44 0.48 0 1 -0 --1 0 0.6 0.4 0.44 0 1 -0 --0.6 0 0.6 0.44 0.44 0 1 -0 --0.2 0 0.2 0.48 0.48 0 1 -0 --0.6 0 0.2 0.44 0.48 0 1 -0 --0.2 0 0.6 0.48 0.44 0 1 -0 --0.2 0 0.2 0.48 0.48 0 1 -0 --0.6 0 0.6 0.44 0.44 0 1 -0 --0.2 0 0.6 0.48 0.44 0 1 -0 -0.2 0 0.2 0.52 0.48 0 1 -0 --0.2 0 0.2 0.48 0.48 0 1 -0 -0.2 0 0.6 0.52 0.44 0 1 -0 -0.2 0 0.2 0.52 0.48 0 1 -0 --0.2 0 0.6 0.48 0.44 0 1 -0 -0.2 0 0.6 0.52 0.44 0 1 -0 -0.6 0 0.2 0.56 0.48 0 1 -0 -0.2 0 0.2 0.52 0.48 0 1 -0 -0.6 0 0.6 0.56 0.44 0 1 -0 -0.6 0 0.2 0.56 0.48 0 1 -0 -0.2 0 0.6 0.52 0.44 0 1 -0 -0.6 0 0.6 0.56 0.44 0 1 -0 -1 0 0.2 0.6 0.48 0 1 -0 -0.6 0 0.2 0.56 0.48 0 1 -0 -1 0 0.6 0.6 0.44 0 1 -0 -1 0 0.2 0.6 0.48 0 1 -0 -0.6 0 0.6 0.56 0.44 0 1 -0 -1 0 0.6 0.6 0.44 0 1 -0 -1.4 0 0.2 0.64 0.48 0 1 -0 -1 0 0.2 0.6 0.48 0 1 -0 -1.4 0 0.6 0.64 0.44 0 1 -0 -1.4 0 0.2 0.64 0.48 0 1 -0 -1 0 0.6 0.6 0.44 0 1 -0 -1.4 0 0.6 0.64 0.44 0 1 -0 -1.8 0 0.2 0.68 0.48 0 1 -0 -1.4 0 0.2 0.64 0.48 0 1 -0 -1.8 0 0.6 0.68 0.44 0 1 -0 -1.8 0 0.2 0.68 0.48 0 1 -0 -1.4 0 0.6 0.64 0.44 0 1 -0 -1.8 0 0.6 0.68 0.44 0 1 -0 -2.2 0 0.2 0.72 0.48 0 1 -0 -1.8 0 0.2 0.68 0.48 0 1 -0 -2.2 0 0.6 0.72 0.44 0 1 -0 -2.2 0 0.2 0.72 0.48 0 1 -0 -1.8 0 0.6 0.68 0.44 0 1 -0 -2.2 0 0.6 0.72 0.44 0 1 -0 -2.6 0 0.2 0.76 0.48 0 1 -0 -2.2 0 0.2 0.72 0.48 0 1 -0 -2.6 0 0.6 0.76 0.44 0 1 -0 -2.6 0 0.2 0.76 0.48 0 1 -0 -2.2 0 0.6 0.72 0.44 0 1 -0 -2.6 0 0.6 0.76 0.44 0 1 -0 -3 0 0.2 0.8 0.48 0 1 -0 -2.6 0 0.2 0.76 0.48 0 1 -0 -3 0 0.6 0.8 0.44 0 1 -0 -3 0 0.2 0.8 0.48 0 1 -0 -2.6 0 0.6 0.76 0.44 0 1 -0 -3 0 0.6 0.8 0.44 0 1 -0 -3.4 0 0.2 0.84 0.48 0 1 -0 -3 0 0.2 0.8 0.48 0 1 -0 -3.4 0 0.6 0.84 0.44 0 1 -0 -3.4 0 0.2 0.84 0.48 0 1 -0 -3 0 0.6 0.8 0.44 0 1 -0 -3.4 0 0.6 0.84 0.44 0 1 -0 -3.8 0 0.2 0.88 0.48 0 1 -0 -3.4 0 0.2 0.84 0.48 0 1 -0 -3.8 0 0.6 0.88 0.44 0 1 -0 -3.8 0 0.2 0.88 0.48 0 1 -0 -3.4 0 0.6 0.84 0.44 0 1 -0 -3.8 0 0.6 0.88 0.44 0 1 -0 -4.2 0 0.2 0.92 0.48 0 1 -0 -3.8 0 0.2 0.88 0.48 0 1 -0 -4.2 0 0.6 0.92 0.44 0 1 -0 -4.2 0 0.2 0.92 0.48 0 1 -0 -3.8 0 0.6 0.88 0.44 0 1 -0 -4.2 0 0.6 0.92 0.44 0 1 -0 -4.6 0 0.2 0.96 0.48 0 1 -0 -4.2 0 0.2 0.92 0.48 0 1 -0 -4.6 0 0.6 0.96 0.44 0 1 -0 -4.6 0 0.2 0.96 0.48 0 1 -0 -4.2 0 0.6 0.92 0.44 0 1 -0 -4.6 0 0.6 0.96 0.44 0 1 -0 -5 0 0.2 1 0.48 0 1 -0 -4.6 0 0.2 0.96 0.48 0 1 -0 -5 0 0.6 1 0.44 0 1 -0 -5 0 0.2 1 0.48 0 1 -0 -4.6 0 0.6 0.96 0.44 0 1 -0 --5 0 1 0 0.4 0 1 -0 --4.6 0 0.6 0.04 0.44 0 1 -0 --5 0 0.6 0 0.44 0 1 -0 --4.6 0 1 0.04 0.4 0 1 -0 --4.6 0 0.6 0.04 0.44 0 1 -0 --5 0 1 0 0.4 0 1 -0 --4.6 0 1 0.04 0.4 0 1 -0 --4.2 0 0.6 0.08 0.44 0 1 -0 --4.6 0 0.6 0.04 0.44 0 1 -0 --4.2 0 1 0.08 0.4 0 1 -0 --4.2 0 0.6 0.08 0.44 0 1 -0 --4.6 0 1 0.04 0.4 0 1 -0 --4.2 0 1 0.08 0.4 0 1 -0 --3.8 0 0.6 0.12 0.44 0 1 -0 --4.2 0 0.6 0.08 0.44 0 1 -0 --3.8 0 1 0.12 0.4 0 1 -0 --3.8 0 0.6 0.12 0.44 0 1 -0 --4.2 0 1 0.08 0.4 0 1 -0 --3.8 0 1 0.12 0.4 0 1 -0 --3.4 0 0.6 0.16 0.44 0 1 -0 --3.8 0 0.6 0.12 0.44 0 1 -0 --3.4 0 1 0.16 0.4 0 1 -0 --3.4 0 0.6 0.16 0.44 0 1 -0 --3.8 0 1 0.12 0.4 0 1 -0 --3.4 0 1 0.16 0.4 0 1 -0 --3 0 0.6 0.2 0.44 0 1 -0 --3.4 0 0.6 0.16 0.44 0 1 -0 --3 0 1 0.2 0.4 0 1 -0 --3 0 0.6 0.2 0.44 0 1 -0 --3.4 0 1 0.16 0.4 0 1 -0 --3 0 1 0.2 0.4 0 1 -0 --2.6 0 0.6 0.24 0.44 0 1 -0 --3 0 0.6 0.2 0.44 0 1 -0 --2.6 0 1 0.24 0.4 0 1 -0 --2.6 0 0.6 0.24 0.44 0 1 -0 --3 0 1 0.2 0.4 0 1 -0 --2.6 0 1 0.24 0.4 0 1 -0 --2.2 0 0.6 0.28 0.44 0 1 -0 --2.6 0 0.6 0.24 0.44 0 1 -0 --2.2 0 1 0.28 0.4 0 1 -0 --2.2 0 0.6 0.28 0.44 0 1 -0 --2.6 0 1 0.24 0.4 0 1 -0 --2.2 0 1 0.28 0.4 0 1 -0 --1.8 0 0.6 0.32 0.44 0 1 -0 --2.2 0 0.6 0.28 0.44 0 1 -0 --1.8 0 1 0.32 0.4 0 1 -0 --1.8 0 0.6 0.32 0.44 0 1 -0 --2.2 0 1 0.28 0.4 0 1 -0 --1.8 0 1 0.32 0.4 0 1 -0 --1.4 0 0.6 0.36 0.44 0 1 -0 --1.8 0 0.6 0.32 0.44 0 1 -0 --1.4 0 1 0.36 0.4 0 1 -0 --1.4 0 0.6 0.36 0.44 0 1 -0 --1.8 0 1 0.32 0.4 0 1 -0 --1.4 0 1 0.36 0.4 0 1 -0 --1 0 0.6 0.4 0.44 0 1 -0 --1.4 0 0.6 0.36 0.44 0 1 -0 --1 0 1 0.4 0.4 0 1 -0 --1 0 0.6 0.4 0.44 0 1 -0 --1.4 0 1 0.36 0.4 0 1 -0 --1 0 1 0.4 0.4 0 1 -0 --0.6 0 0.6 0.44 0.44 0 1 -0 --1 0 0.6 0.4 0.44 0 1 -0 --0.6 0 1 0.44 0.4 0 1 -0 --0.6 0 0.6 0.44 0.44 0 1 -0 --1 0 1 0.4 0.4 0 1 -0 --0.6 0 1 0.44 0.4 0 1 -0 --0.2 0 0.6 0.48 0.44 0 1 -0 --0.6 0 0.6 0.44 0.44 0 1 -0 --0.2 0 1 0.48 0.4 0 1 -0 --0.2 0 0.6 0.48 0.44 0 1 -0 --0.6 0 1 0.44 0.4 0 1 -0 --0.2 0 1 0.48 0.4 0 1 -0 -0.2 0 0.6 0.52 0.44 0 1 -0 --0.2 0 0.6 0.48 0.44 0 1 -0 -0.2 0 1 0.52 0.4 0 1 -0 -0.2 0 0.6 0.52 0.44 0 1 -0 --0.2 0 1 0.48 0.4 0 1 -0 -0.2 0 1 0.52 0.4 0 1 -0 -0.6 0 0.6 0.56 0.44 0 1 -0 -0.2 0 0.6 0.52 0.44 0 1 -0 -0.6 0 1 0.56 0.4 0 1 -0 -0.6 0 0.6 0.56 0.44 0 1 -0 -0.2 0 1 0.52 0.4 0 1 -0 -0.6 0 1 0.56 0.4 0 1 -0 -1 0 0.6 0.6 0.44 0 1 -0 -0.6 0 0.6 0.56 0.44 0 1 -0 -1 0 1 0.6 0.4 0 1 -0 -1 0 0.6 0.6 0.44 0 1 -0 -0.6 0 1 0.56 0.4 0 1 -0 -1 0 1 0.6 0.4 0 1 -0 -1.4 0 0.6 0.64 0.44 0 1 -0 -1 0 0.6 0.6 0.44 0 1 -0 -1.4 0 1 0.64 0.4 0 1 -0 -1.4 0 0.6 0.64 0.44 0 1 -0 -1 0 1 0.6 0.4 0 1 -0 -1.4 0 1 0.64 0.4 0 1 -0 -1.8 0 0.6 0.68 0.44 0 1 -0 -1.4 0 0.6 0.64 0.44 0 1 -0 -1.8 0 1 0.68 0.4 0 1 -0 -1.8 0 0.6 0.68 0.44 0 1 -0 -1.4 0 1 0.64 0.4 0 1 -0 -1.8 0 1 0.68 0.4 0 1 -0 -2.2 0 0.6 0.72 0.44 0 1 -0 -1.8 0 0.6 0.68 0.44 0 1 -0 -2.2 0 1 0.72 0.4 0 1 -0 -2.2 0 0.6 0.72 0.44 0 1 -0 -1.8 0 1 0.68 0.4 0 1 -0 -2.2 0 1 0.72 0.4 0 1 -0 -2.6 0 0.6 0.76 0.44 0 1 -0 -2.2 0 0.6 0.72 0.44 0 1 -0 -2.6 0 1 0.76 0.4 0 1 -0 -2.6 0 0.6 0.76 0.44 0 1 -0 -2.2 0 1 0.72 0.4 0 1 -0 -2.6 0 1 0.76 0.4 0 1 -0 -3 0 0.6 0.8 0.44 0 1 -0 -2.6 0 0.6 0.76 0.44 0 1 -0 -3 0 1 0.8 0.4 0 1 -0 -3 0 0.6 0.8 0.44 0 1 -0 -2.6 0 1 0.76 0.4 0 1 -0 -3 0 1 0.8 0.4 0 1 -0 -3.4 0 0.6 0.84 0.44 0 1 -0 -3 0 0.6 0.8 0.44 0 1 -0 -3.4 0 1 0.84 0.4 0 1 -0 -3.4 0 0.6 0.84 0.44 0 1 -0 -3 0 1 0.8 0.4 0 1 -0 -3.4 0 1 0.84 0.4 0 1 -0 -3.8 0 0.6 0.88 0.44 0 1 -0 -3.4 0 0.6 0.84 0.44 0 1 -0 -3.8 0 1 0.88 0.4 0 1 -0 -3.8 0 0.6 0.88 0.44 0 1 -0 -3.4 0 1 0.84 0.4 0 1 -0 -3.8 0 1 0.88 0.4 0 1 -0 -4.2 0 0.6 0.92 0.44 0 1 -0 -3.8 0 0.6 0.88 0.44 0 1 -0 -4.2 0 1 0.92 0.4 0 1 -0 -4.2 0 0.6 0.92 0.44 0 1 -0 -3.8 0 1 0.88 0.4 0 1 -0 -4.2 0 1 0.92 0.4 0 1 -0 -4.6 0 0.6 0.96 0.44 0 1 -0 -4.2 0 0.6 0.92 0.44 0 1 -0 -4.6 0 1 0.96 0.4 0 1 -0 -4.6 0 0.6 0.96 0.44 0 1 -0 -4.2 0 1 0.92 0.4 0 1 -0 -4.6 0 1 0.96 0.4 0 1 -0 -5 0 0.6 1 0.44 0 1 -0 -4.6 0 0.6 0.96 0.44 0 1 -0 -5 0 1 1 0.4 0 1 -0 -5 0 0.6 1 0.44 0 1 -0 -4.6 0 1 0.96 0.4 0 1 -0 --5 0 1.4 0 0.36 0 1 -0 --4.6 0 1 0.04 0.4 0 1 -0 --5 0 1 0 0.4 0 1 -0 --4.6 0 1.4 0.04 0.36 0 1 -0 --4.6 0 1 0.04 0.4 0 1 -0 --5 0 1.4 0 0.36 0 1 -0 --4.6 0 1.4 0.04 0.36 0 1 -0 --4.2 0 1 0.08 0.4 0 1 -0 --4.6 0 1 0.04 0.4 0 1 -0 --4.2 0 1.4 0.08 0.36 0 1 -0 --4.2 0 1 0.08 0.4 0 1 -0 --4.6 0 1.4 0.04 0.36 0 1 -0 --4.2 0 1.4 0.08 0.36 0 1 -0 --3.8 0 1 0.12 0.4 0 1 -0 --4.2 0 1 0.08 0.4 0 1 -0 --3.8 0 1.4 0.12 0.36 0 1 -0 --3.8 0 1 0.12 0.4 0 1 -0 --4.2 0 1.4 0.08 0.36 0 1 -0 --3.8 0 1.4 0.12 0.36 0 1 -0 --3.4 0 1 0.16 0.4 0 1 -0 --3.8 0 1 0.12 0.4 0 1 -0 --3.4 0 1.4 0.16 0.36 0 1 -0 --3.4 0 1 0.16 0.4 0 1 -0 --3.8 0 1.4 0.12 0.36 0 1 -0 --3.4 0 1.4 0.16 0.36 0 1 -0 --3 0 1 0.2 0.4 0 1 -0 --3.4 0 1 0.16 0.4 0 1 -0 --3 0 1.4 0.2 0.36 0 1 -0 --3 0 1 0.2 0.4 0 1 -0 --3.4 0 1.4 0.16 0.36 0 1 -0 --3 0 1.4 0.2 0.36 0 1 -0 --2.6 0 1 0.24 0.4 0 1 -0 --3 0 1 0.2 0.4 0 1 -0 --2.6 0 1.4 0.24 0.36 0 1 -0 --2.6 0 1 0.24 0.4 0 1 -0 --3 0 1.4 0.2 0.36 0 1 -0 --2.6 0 1.4 0.24 0.36 0 1 -0 --2.2 0 1 0.28 0.4 0 1 -0 --2.6 0 1 0.24 0.4 0 1 -0 --2.2 0 1.4 0.28 0.36 0 1 -0 --2.2 0 1 0.28 0.4 0 1 -0 --2.6 0 1.4 0.24 0.36 0 1 -0 --2.2 0 1.4 0.28 0.36 0 1 -0 --1.8 0 1 0.32 0.4 0 1 -0 --2.2 0 1 0.28 0.4 0 1 -0 --1.8 0 1.4 0.32 0.36 0 1 -0 --1.8 0 1 0.32 0.4 0 1 -0 --2.2 0 1.4 0.28 0.36 0 1 -0 --1.8 0 1.4 0.32 0.36 0 1 -0 --1.4 0 1 0.36 0.4 0 1 -0 --1.8 0 1 0.32 0.4 0 1 -0 --1.4 0 1.4 0.36 0.36 0 1 -0 --1.4 0 1 0.36 0.4 0 1 -0 --1.8 0 1.4 0.32 0.36 0 1 -0 --1.4 0 1.4 0.36 0.36 0 1 -0 --1 0 1 0.4 0.4 0 1 -0 --1.4 0 1 0.36 0.4 0 1 -0 --1 0 1.4 0.4 0.36 0 1 -0 --1 0 1 0.4 0.4 0 1 -0 --1.4 0 1.4 0.36 0.36 0 1 -0 --1 0 1.4 0.4 0.36 0 1 -0 --0.6 0 1 0.44 0.4 0 1 -0 --1 0 1 0.4 0.4 0 1 -0 --0.6 0 1.4 0.44 0.36 0 1 -0 --0.6 0 1 0.44 0.4 0 1 -0 --1 0 1.4 0.4 0.36 0 1 -0 --0.6 0 1.4 0.44 0.36 0 1 -0 --0.2 0 1 0.48 0.4 0 1 -0 --0.6 0 1 0.44 0.4 0 1 -0 --0.2 0 1.4 0.48 0.36 0 1 -0 --0.2 0 1 0.48 0.4 0 1 -0 --0.6 0 1.4 0.44 0.36 0 1 -0 --0.2 0 1.4 0.48 0.36 0 1 -0 -0.2 0 1 0.52 0.4 0 1 -0 --0.2 0 1 0.48 0.4 0 1 -0 -0.2 0 1.4 0.52 0.36 0 1 -0 -0.2 0 1 0.52 0.4 0 1 -0 --0.2 0 1.4 0.48 0.36 0 1 -0 -0.2 0 1.4 0.52 0.36 0 1 -0 -0.6 0 1 0.56 0.4 0 1 -0 -0.2 0 1 0.52 0.4 0 1 -0 -0.6 0 1.4 0.56 0.36 0 1 -0 -0.6 0 1 0.56 0.4 0 1 -0 -0.2 0 1.4 0.52 0.36 0 1 -0 -0.6 0 1.4 0.56 0.36 0 1 -0 -1 0 1 0.6 0.4 0 1 -0 -0.6 0 1 0.56 0.4 0 1 -0 -1 0 1.4 0.6 0.36 0 1 -0 -1 0 1 0.6 0.4 0 1 -0 -0.6 0 1.4 0.56 0.36 0 1 -0 -1 0 1.4 0.6 0.36 0 1 -0 -1.4 0 1 0.64 0.4 0 1 -0 -1 0 1 0.6 0.4 0 1 -0 -1.4 0 1.4 0.64 0.36 0 1 -0 -1.4 0 1 0.64 0.4 0 1 -0 -1 0 1.4 0.6 0.36 0 1 -0 -1.4 0 1.4 0.64 0.36 0 1 -0 -1.8 0 1 0.68 0.4 0 1 -0 -1.4 0 1 0.64 0.4 0 1 -0 -1.8 0 1.4 0.68 0.36 0 1 -0 -1.8 0 1 0.68 0.4 0 1 -0 -1.4 0 1.4 0.64 0.36 0 1 -0 -1.8 0 1.4 0.68 0.36 0 1 -0 -2.2 0 1 0.72 0.4 0 1 -0 -1.8 0 1 0.68 0.4 0 1 -0 -2.2 0 1.4 0.72 0.36 0 1 -0 -2.2 0 1 0.72 0.4 0 1 -0 -1.8 0 1.4 0.68 0.36 0 1 -0 -2.2 0 1.4 0.72 0.36 0 1 -0 -2.6 0 1 0.76 0.4 0 1 -0 -2.2 0 1 0.72 0.4 0 1 -0 -2.6 0 1.4 0.76 0.36 0 1 -0 -2.6 0 1 0.76 0.4 0 1 -0 -2.2 0 1.4 0.72 0.36 0 1 -0 -2.6 0 1.4 0.76 0.36 0 1 -0 -3 0 1 0.8 0.4 0 1 -0 -2.6 0 1 0.76 0.4 0 1 -0 -3 0 1.4 0.8 0.36 0 1 -0 -3 0 1 0.8 0.4 0 1 -0 -2.6 0 1.4 0.76 0.36 0 1 -0 -3 0 1.4 0.8 0.36 0 1 -0 -3.4 0 1 0.84 0.4 0 1 -0 -3 0 1 0.8 0.4 0 1 -0 -3.4 0 1.4 0.84 0.36 0 1 -0 -3.4 0 1 0.84 0.4 0 1 -0 -3 0 1.4 0.8 0.36 0 1 -0 -3.4 0 1.4 0.84 0.36 0 1 -0 -3.8 0 1 0.88 0.4 0 1 -0 -3.4 0 1 0.84 0.4 0 1 -0 -3.8 0 1.4 0.88 0.36 0 1 -0 -3.8 0 1 0.88 0.4 0 1 -0 -3.4 0 1.4 0.84 0.36 0 1 -0 -3.8 0 1.4 0.88 0.36 0 1 -0 -4.2 0 1 0.92 0.4 0 1 -0 -3.8 0 1 0.88 0.4 0 1 -0 -4.2 0 1.4 0.92 0.36 0 1 -0 -4.2 0 1 0.92 0.4 0 1 -0 -3.8 0 1.4 0.88 0.36 0 1 -0 -4.2 0 1.4 0.92 0.36 0 1 -0 -4.6 0 1 0.96 0.4 0 1 -0 -4.2 0 1 0.92 0.4 0 1 -0 -4.6 0 1.4 0.96 0.36 0 1 -0 -4.6 0 1 0.96 0.4 0 1 -0 -4.2 0 1.4 0.92 0.36 0 1 -0 -4.6 0 1.4 0.96 0.36 0 1 -0 -5 0 1 1 0.4 0 1 -0 -4.6 0 1 0.96 0.4 0 1 -0 -5 0 1.4 1 0.36 0 1 -0 -5 0 1 1 0.4 0 1 -0 -4.6 0 1.4 0.96 0.36 0 1 -0 --5 0 1.8 0 0.32 0 1 -0 --4.6 0 1.4 0.04 0.36 0 1 -0 --5 0 1.4 0 0.36 0 1 -0 --4.6 0 1.8 0.04 0.32 0 1 -0 --4.6 0 1.4 0.04 0.36 0 1 -0 --5 0 1.8 0 0.32 0 1 -0 --4.6 0 1.8 0.04 0.32 0 1 -0 --4.2 0 1.4 0.08 0.36 0 1 -0 --4.6 0 1.4 0.04 0.36 0 1 -0 --4.2 0 1.8 0.08 0.32 0 1 -0 --4.2 0 1.4 0.08 0.36 0 1 -0 --4.6 0 1.8 0.04 0.32 0 1 -0 --4.2 0 1.8 0.08 0.32 0 1 -0 --3.8 0 1.4 0.12 0.36 0 1 -0 --4.2 0 1.4 0.08 0.36 0 1 -0 --3.8 0 1.8 0.12 0.32 0 1 -0 --3.8 0 1.4 0.12 0.36 0 1 -0 --4.2 0 1.8 0.08 0.32 0 1 -0 --3.8 0 1.8 0.12 0.32 0 1 -0 --3.4 0 1.4 0.16 0.36 0 1 -0 --3.8 0 1.4 0.12 0.36 0 1 -0 --3.4 0 1.8 0.16 0.32 0 1 -0 --3.4 0 1.4 0.16 0.36 0 1 -0 --3.8 0 1.8 0.12 0.32 0 1 -0 --3.4 0 1.8 0.16 0.32 0 1 -0 --3 0 1.4 0.2 0.36 0 1 -0 --3.4 0 1.4 0.16 0.36 0 1 -0 --3 0 1.8 0.2 0.32 0 1 -0 --3 0 1.4 0.2 0.36 0 1 -0 --3.4 0 1.8 0.16 0.32 0 1 -0 --3 0 1.8 0.2 0.32 0 1 -0 --2.6 0 1.4 0.24 0.36 0 1 -0 --3 0 1.4 0.2 0.36 0 1 -0 --2.6 0 1.8 0.24 0.32 0 1 -0 --2.6 0 1.4 0.24 0.36 0 1 -0 --3 0 1.8 0.2 0.32 0 1 -0 --2.6 0 1.8 0.24 0.32 0 1 -0 --2.2 0 1.4 0.28 0.36 0 1 -0 --2.6 0 1.4 0.24 0.36 0 1 -0 --2.2 0 1.8 0.28 0.32 0 1 -0 --2.2 0 1.4 0.28 0.36 0 1 -0 --2.6 0 1.8 0.24 0.32 0 1 -0 --2.2 0 1.8 0.28 0.32 0 1 -0 --1.8 0 1.4 0.32 0.36 0 1 -0 --2.2 0 1.4 0.28 0.36 0 1 -0 --1.8 0 1.8 0.32 0.32 0 1 -0 --1.8 0 1.4 0.32 0.36 0 1 -0 --2.2 0 1.8 0.28 0.32 0 1 -0 --1.8 0 1.8 0.32 0.32 0 1 -0 --1.4 0 1.4 0.36 0.36 0 1 -0 --1.8 0 1.4 0.32 0.36 0 1 -0 --1.4 0 1.8 0.36 0.32 0 1 -0 --1.4 0 1.4 0.36 0.36 0 1 -0 --1.8 0 1.8 0.32 0.32 0 1 -0 --1.4 0 1.8 0.36 0.32 0 1 -0 --1 0 1.4 0.4 0.36 0 1 -0 --1.4 0 1.4 0.36 0.36 0 1 -0 --1 0 1.8 0.4 0.32 0 1 -0 --1 0 1.4 0.4 0.36 0 1 -0 --1.4 0 1.8 0.36 0.32 0 1 -0 --1 0 1.8 0.4 0.32 0 1 -0 --0.6 0 1.4 0.44 0.36 0 1 -0 --1 0 1.4 0.4 0.36 0 1 -0 --0.6 0 1.8 0.44 0.32 0 1 -0 --0.6 0 1.4 0.44 0.36 0 1 -0 --1 0 1.8 0.4 0.32 0 1 -0 --0.6 0 1.8 0.44 0.32 0 1 -0 --0.2 0 1.4 0.48 0.36 0 1 -0 --0.6 0 1.4 0.44 0.36 0 1 -0 --0.2 0 1.8 0.48 0.32 0 1 -0 --0.2 0 1.4 0.48 0.36 0 1 -0 --0.6 0 1.8 0.44 0.32 0 1 -0 --0.2 0 1.8 0.48 0.32 0 1 -0 -0.2 0 1.4 0.52 0.36 0 1 -0 --0.2 0 1.4 0.48 0.36 0 1 -0 -0.2 0 1.8 0.52 0.32 0 1 -0 -0.2 0 1.4 0.52 0.36 0 1 -0 --0.2 0 1.8 0.48 0.32 0 1 -0 -0.2 0 1.8 0.52 0.32 0 1 -0 -0.6 0 1.4 0.56 0.36 0 1 -0 -0.2 0 1.4 0.52 0.36 0 1 -0 -0.6 0 1.8 0.56 0.32 0 1 -0 -0.6 0 1.4 0.56 0.36 0 1 -0 -0.2 0 1.8 0.52 0.32 0 1 -0 -0.6 0 1.8 0.56 0.32 0 1 -0 -1 0 1.4 0.6 0.36 0 1 -0 -0.6 0 1.4 0.56 0.36 0 1 -0 -1 0 1.8 0.6 0.32 0 1 -0 -1 0 1.4 0.6 0.36 0 1 -0 -0.6 0 1.8 0.56 0.32 0 1 -0 -1 0 1.8 0.6 0.32 0 1 -0 -1.4 0 1.4 0.64 0.36 0 1 -0 -1 0 1.4 0.6 0.36 0 1 -0 -1.4 0 1.8 0.64 0.32 0 1 -0 -1.4 0 1.4 0.64 0.36 0 1 -0 -1 0 1.8 0.6 0.32 0 1 -0 -1.4 0 1.8 0.64 0.32 0 1 -0 -1.8 0 1.4 0.68 0.36 0 1 -0 -1.4 0 1.4 0.64 0.36 0 1 -0 -1.8 0 1.8 0.68 0.32 0 1 -0 -1.8 0 1.4 0.68 0.36 0 1 -0 -1.4 0 1.8 0.64 0.32 0 1 -0 -1.8 0 1.8 0.68 0.32 0 1 -0 -2.2 0 1.4 0.72 0.36 0 1 -0 -1.8 0 1.4 0.68 0.36 0 1 -0 -2.2 0 1.8 0.72 0.32 0 1 -0 -2.2 0 1.4 0.72 0.36 0 1 -0 -1.8 0 1.8 0.68 0.32 0 1 -0 -2.2 0 1.8 0.72 0.32 0 1 -0 -2.6 0 1.4 0.76 0.36 0 1 -0 -2.2 0 1.4 0.72 0.36 0 1 -0 -2.6 0 1.8 0.76 0.32 0 1 -0 -2.6 0 1.4 0.76 0.36 0 1 -0 -2.2 0 1.8 0.72 0.32 0 1 -0 -2.6 0 1.8 0.76 0.32 0 1 -0 -3 0 1.4 0.8 0.36 0 1 -0 -2.6 0 1.4 0.76 0.36 0 1 -0 -3 0 1.8 0.8 0.32 0 1 -0 -3 0 1.4 0.8 0.36 0 1 -0 -2.6 0 1.8 0.76 0.32 0 1 -0 -3 0 1.8 0.8 0.32 0 1 -0 -3.4 0 1.4 0.84 0.36 0 1 -0 -3 0 1.4 0.8 0.36 0 1 -0 -3.4 0 1.8 0.84 0.32 0 1 -0 -3.4 0 1.4 0.84 0.36 0 1 -0 -3 0 1.8 0.8 0.32 0 1 -0 -3.4 0 1.8 0.84 0.32 0 1 -0 -3.8 0 1.4 0.88 0.36 0 1 -0 -3.4 0 1.4 0.84 0.36 0 1 -0 -3.8 0 1.8 0.88 0.32 0 1 -0 -3.8 0 1.4 0.88 0.36 0 1 -0 -3.4 0 1.8 0.84 0.32 0 1 -0 -3.8 0 1.8 0.88 0.32 0 1 -0 -4.2 0 1.4 0.92 0.36 0 1 -0 -3.8 0 1.4 0.88 0.36 0 1 -0 -4.2 0 1.8 0.92 0.32 0 1 -0 -4.2 0 1.4 0.92 0.36 0 1 -0 -3.8 0 1.8 0.88 0.32 0 1 -0 -4.2 0 1.8 0.92 0.32 0 1 -0 -4.6 0 1.4 0.96 0.36 0 1 -0 -4.2 0 1.4 0.92 0.36 0 1 -0 -4.6 0 1.8 0.96 0.32 0 1 -0 -4.6 0 1.4 0.96 0.36 0 1 -0 -4.2 0 1.8 0.92 0.32 0 1 -0 -4.6 0 1.8 0.96 0.32 0 1 -0 -5 0 1.4 1 0.36 0 1 -0 -4.6 0 1.4 0.96 0.36 0 1 -0 -5 0 1.8 1 0.32 0 1 -0 -5 0 1.4 1 0.36 0 1 -0 -4.6 0 1.8 0.96 0.32 0 1 -0 --5 0 2.2 0 0.28 0 1 -0 --4.6 0 1.8 0.04 0.32 0 1 -0 --5 0 1.8 0 0.32 0 1 -0 --4.6 0 2.2 0.04 0.28 0 1 -0 --4.6 0 1.8 0.04 0.32 0 1 -0 --5 0 2.2 0 0.28 0 1 -0 --4.6 0 2.2 0.04 0.28 0 1 -0 --4.2 0 1.8 0.08 0.32 0 1 -0 --4.6 0 1.8 0.04 0.32 0 1 -0 --4.2 0 2.2 0.08 0.28 0 1 -0 --4.2 0 1.8 0.08 0.32 0 1 -0 --4.6 0 2.2 0.04 0.28 0 1 -0 --4.2 0 2.2 0.08 0.28 0 1 -0 --3.8 0 1.8 0.12 0.32 0 1 -0 --4.2 0 1.8 0.08 0.32 0 1 -0 --3.8 0 2.2 0.12 0.28 0 1 -0 --3.8 0 1.8 0.12 0.32 0 1 -0 --4.2 0 2.2 0.08 0.28 0 1 -0 --3.8 0 2.2 0.12 0.28 0 1 -0 --3.4 0 1.8 0.16 0.32 0 1 -0 --3.8 0 1.8 0.12 0.32 0 1 -0 --3.4 0 2.2 0.16 0.28 0 1 -0 --3.4 0 1.8 0.16 0.32 0 1 -0 --3.8 0 2.2 0.12 0.28 0 1 -0 --3.4 0 2.2 0.16 0.28 0 1 -0 --3 0 1.8 0.2 0.32 0 1 -0 --3.4 0 1.8 0.16 0.32 0 1 -0 --3 0 2.2 0.2 0.28 0 1 -0 --3 0 1.8 0.2 0.32 0 1 -0 --3.4 0 2.2 0.16 0.28 0 1 -0 --3 0 2.2 0.2 0.28 0 1 -0 --2.6 0 1.8 0.24 0.32 0 1 -0 --3 0 1.8 0.2 0.32 0 1 -0 --2.6 0 2.2 0.24 0.28 0 1 -0 --2.6 0 1.8 0.24 0.32 0 1 -0 --3 0 2.2 0.2 0.28 0 1 -0 --2.6 0 2.2 0.24 0.28 0 1 -0 --2.2 0 1.8 0.28 0.32 0 1 -0 --2.6 0 1.8 0.24 0.32 0 1 -0 --2.2 0 2.2 0.28 0.28 0 1 -0 --2.2 0 1.8 0.28 0.32 0 1 -0 --2.6 0 2.2 0.24 0.28 0 1 -0 --2.2 0 2.2 0.28 0.28 0 1 -0 --1.8 0 1.8 0.32 0.32 0 1 -0 --2.2 0 1.8 0.28 0.32 0 1 -0 --1.8 0 2.2 0.32 0.28 0 1 -0 --1.8 0 1.8 0.32 0.32 0 1 -0 --2.2 0 2.2 0.28 0.28 0 1 -0 --1.8 0 2.2 0.32 0.28 0 1 -0 --1.4 0 1.8 0.36 0.32 0 1 -0 --1.8 0 1.8 0.32 0.32 0 1 -0 --1.4 0 2.2 0.36 0.28 0 1 -0 --1.4 0 1.8 0.36 0.32 0 1 -0 --1.8 0 2.2 0.32 0.28 0 1 -0 --1.4 0 2.2 0.36 0.28 0 1 -0 --1 0 1.8 0.4 0.32 0 1 -0 --1.4 0 1.8 0.36 0.32 0 1 -0 --1 0 2.2 0.4 0.28 0 1 -0 --1 0 1.8 0.4 0.32 0 1 -0 --1.4 0 2.2 0.36 0.28 0 1 -0 --1 0 2.2 0.4 0.28 0 1 -0 --0.6 0 1.8 0.44 0.32 0 1 -0 --1 0 1.8 0.4 0.32 0 1 -0 --0.6 0 2.2 0.44 0.28 0 1 -0 --0.6 0 1.8 0.44 0.32 0 1 -0 --1 0 2.2 0.4 0.28 0 1 -0 --0.6 0 2.2 0.44 0.28 0 1 -0 --0.2 0 1.8 0.48 0.32 0 1 -0 --0.6 0 1.8 0.44 0.32 0 1 -0 --0.2 0 2.2 0.48 0.28 0 1 -0 --0.2 0 1.8 0.48 0.32 0 1 -0 --0.6 0 2.2 0.44 0.28 0 1 -0 --0.2 0 2.2 0.48 0.28 0 1 -0 -0.2 0 1.8 0.52 0.32 0 1 -0 --0.2 0 1.8 0.48 0.32 0 1 -0 -0.2 0 2.2 0.52 0.28 0 1 -0 -0.2 0 1.8 0.52 0.32 0 1 -0 --0.2 0 2.2 0.48 0.28 0 1 -0 -0.2 0 2.2 0.52 0.28 0 1 -0 -0.6 0 1.8 0.56 0.32 0 1 -0 -0.2 0 1.8 0.52 0.32 0 1 -0 -0.6 0 2.2 0.56 0.28 0 1 -0 -0.6 0 1.8 0.56 0.32 0 1 -0 -0.2 0 2.2 0.52 0.28 0 1 -0 -0.6 0 2.2 0.56 0.28 0 1 -0 -1 0 1.8 0.6 0.32 0 1 -0 -0.6 0 1.8 0.56 0.32 0 1 -0 -1 0 2.2 0.6 0.28 0 1 -0 -1 0 1.8 0.6 0.32 0 1 -0 -0.6 0 2.2 0.56 0.28 0 1 -0 -1 0 2.2 0.6 0.28 0 1 -0 -1.4 0 1.8 0.64 0.32 0 1 -0 -1 0 1.8 0.6 0.32 0 1 -0 -1.4 0 2.2 0.64 0.28 0 1 -0 -1.4 0 1.8 0.64 0.32 0 1 -0 -1 0 2.2 0.6 0.28 0 1 -0 -1.4 0 2.2 0.64 0.28 0 1 -0 -1.8 0 1.8 0.68 0.32 0 1 -0 -1.4 0 1.8 0.64 0.32 0 1 -0 -1.8 0 2.2 0.68 0.28 0 1 -0 -1.8 0 1.8 0.68 0.32 0 1 -0 -1.4 0 2.2 0.64 0.28 0 1 -0 -1.8 0 2.2 0.68 0.28 0 1 -0 -2.2 0 1.8 0.72 0.32 0 1 -0 -1.8 0 1.8 0.68 0.32 0 1 -0 -2.2 0 2.2 0.72 0.28 0 1 -0 -2.2 0 1.8 0.72 0.32 0 1 -0 -1.8 0 2.2 0.68 0.28 0 1 -0 -2.2 0 2.2 0.72 0.28 0 1 -0 -2.6 0 1.8 0.76 0.32 0 1 -0 -2.2 0 1.8 0.72 0.32 0 1 -0 -2.6 0 2.2 0.76 0.28 0 1 -0 -2.6 0 1.8 0.76 0.32 0 1 -0 -2.2 0 2.2 0.72 0.28 0 1 -0 -2.6 0 2.2 0.76 0.28 0 1 -0 -3 0 1.8 0.8 0.32 0 1 -0 -2.6 0 1.8 0.76 0.32 0 1 -0 -3 0 2.2 0.8 0.28 0 1 -0 -3 0 1.8 0.8 0.32 0 1 -0 -2.6 0 2.2 0.76 0.28 0 1 -0 -3 0 2.2 0.8 0.28 0 1 -0 -3.4 0 1.8 0.84 0.32 0 1 -0 -3 0 1.8 0.8 0.32 0 1 -0 -3.4 0 2.2 0.84 0.28 0 1 -0 -3.4 0 1.8 0.84 0.32 0 1 -0 -3 0 2.2 0.8 0.28 0 1 -0 -3.4 0 2.2 0.84 0.28 0 1 -0 -3.8 0 1.8 0.88 0.32 0 1 -0 -3.4 0 1.8 0.84 0.32 0 1 -0 -3.8 0 2.2 0.88 0.28 0 1 -0 -3.8 0 1.8 0.88 0.32 0 1 -0 -3.4 0 2.2 0.84 0.28 0 1 -0 -3.8 0 2.2 0.88 0.28 0 1 -0 -4.2 0 1.8 0.92 0.32 0 1 -0 -3.8 0 1.8 0.88 0.32 0 1 -0 -4.2 0 2.2 0.92 0.28 0 1 -0 -4.2 0 1.8 0.92 0.32 0 1 -0 -3.8 0 2.2 0.88 0.28 0 1 -0 -4.2 0 2.2 0.92 0.28 0 1 -0 -4.6 0 1.8 0.96 0.32 0 1 -0 -4.2 0 1.8 0.92 0.32 0 1 -0 -4.6 0 2.2 0.96 0.28 0 1 -0 -4.6 0 1.8 0.96 0.32 0 1 -0 -4.2 0 2.2 0.92 0.28 0 1 -0 -4.6 0 2.2 0.96 0.28 0 1 -0 -5 0 1.8 1 0.32 0 1 -0 -4.6 0 1.8 0.96 0.32 0 1 -0 -5 0 2.2 1 0.28 0 1 -0 -5 0 1.8 1 0.32 0 1 -0 -4.6 0 2.2 0.96 0.28 0 1 -0 --5 0 2.6 0 0.24 0 1 -0 --4.6 0 2.2 0.04 0.28 0 1 -0 --5 0 2.2 0 0.28 0 1 -0 --4.6 0 2.6 0.04 0.24 0 1 -0 --4.6 0 2.2 0.04 0.28 0 1 -0 --5 0 2.6 0 0.24 0 1 -0 --4.6 0 2.6 0.04 0.24 0 1 -0 --4.2 0 2.2 0.08 0.28 0 1 -0 --4.6 0 2.2 0.04 0.28 0 1 -0 --4.2 0 2.6 0.08 0.24 0 1 -0 --4.2 0 2.2 0.08 0.28 0 1 -0 --4.6 0 2.6 0.04 0.24 0 1 -0 --4.2 0 2.6 0.08 0.24 0 1 -0 --3.8 0 2.2 0.12 0.28 0 1 -0 --4.2 0 2.2 0.08 0.28 0 1 -0 --3.8 0 2.6 0.12 0.24 0 1 -0 --3.8 0 2.2 0.12 0.28 0 1 -0 --4.2 0 2.6 0.08 0.24 0 1 -0 --3.8 0 2.6 0.12 0.24 0 1 -0 --3.4 0 2.2 0.16 0.28 0 1 -0 --3.8 0 2.2 0.12 0.28 0 1 -0 --3.4 0 2.6 0.16 0.24 0 1 -0 --3.4 0 2.2 0.16 0.28 0 1 -0 --3.8 0 2.6 0.12 0.24 0 1 -0 --3.4 0 2.6 0.16 0.24 0 1 -0 --3 0 2.2 0.2 0.28 0 1 -0 --3.4 0 2.2 0.16 0.28 0 1 -0 --3 0 2.6 0.2 0.24 0 1 -0 --3 0 2.2 0.2 0.28 0 1 -0 --3.4 0 2.6 0.16 0.24 0 1 -0 --3 0 2.6 0.2 0.24 0 1 -0 --2.6 0 2.2 0.24 0.28 0 1 -0 --3 0 2.2 0.2 0.28 0 1 -0 --2.6 0 2.6 0.24 0.24 0 1 -0 --2.6 0 2.2 0.24 0.28 0 1 -0 --3 0 2.6 0.2 0.24 0 1 -0 --2.6 0 2.6 0.24 0.24 0 1 -0 --2.2 0 2.2 0.28 0.28 0 1 -0 --2.6 0 2.2 0.24 0.28 0 1 -0 --2.2 0 2.6 0.28 0.24 0 1 -0 --2.2 0 2.2 0.28 0.28 0 1 -0 --2.6 0 2.6 0.24 0.24 0 1 -0 --2.2 0 2.6 0.28 0.24 0 1 -0 --1.8 0 2.2 0.32 0.28 0 1 -0 --2.2 0 2.2 0.28 0.28 0 1 -0 --1.8 0 2.6 0.32 0.24 0 1 -0 --1.8 0 2.2 0.32 0.28 0 1 -0 --2.2 0 2.6 0.28 0.24 0 1 -0 --1.8 0 2.6 0.32 0.24 0 1 -0 --1.4 0 2.2 0.36 0.28 0 1 -0 --1.8 0 2.2 0.32 0.28 0 1 -0 --1.4 0 2.6 0.36 0.24 0 1 -0 --1.4 0 2.2 0.36 0.28 0 1 -0 --1.8 0 2.6 0.32 0.24 0 1 -0 --1.4 0 2.6 0.36 0.24 0 1 -0 --1 0 2.2 0.4 0.28 0 1 -0 --1.4 0 2.2 0.36 0.28 0 1 -0 --1 0 2.6 0.4 0.24 0 1 -0 --1 0 2.2 0.4 0.28 0 1 -0 --1.4 0 2.6 0.36 0.24 0 1 -0 --1 0 2.6 0.4 0.24 0 1 -0 --0.6 0 2.2 0.44 0.28 0 1 -0 --1 0 2.2 0.4 0.28 0 1 -0 --0.6 0 2.6 0.44 0.24 0 1 -0 --0.6 0 2.2 0.44 0.28 0 1 -0 --1 0 2.6 0.4 0.24 0 1 -0 --0.6 0 2.6 0.44 0.24 0 1 -0 --0.2 0 2.2 0.48 0.28 0 1 -0 --0.6 0 2.2 0.44 0.28 0 1 -0 --0.2 0 2.6 0.48 0.24 0 1 -0 --0.2 0 2.2 0.48 0.28 0 1 -0 --0.6 0 2.6 0.44 0.24 0 1 -0 --0.2 0 2.6 0.48 0.24 0 1 -0 -0.2 0 2.2 0.52 0.28 0 1 -0 --0.2 0 2.2 0.48 0.28 0 1 -0 -0.2 0 2.6 0.52 0.24 0 1 -0 -0.2 0 2.2 0.52 0.28 0 1 -0 --0.2 0 2.6 0.48 0.24 0 1 -0 -0.2 0 2.6 0.52 0.24 0 1 -0 -0.6 0 2.2 0.56 0.28 0 1 -0 -0.2 0 2.2 0.52 0.28 0 1 -0 -0.6 0 2.6 0.56 0.24 0 1 -0 -0.6 0 2.2 0.56 0.28 0 1 -0 -0.2 0 2.6 0.52 0.24 0 1 -0 -0.6 0 2.6 0.56 0.24 0 1 -0 -1 0 2.2 0.6 0.28 0 1 -0 -0.6 0 2.2 0.56 0.28 0 1 -0 -1 0 2.6 0.6 0.24 0 1 -0 -1 0 2.2 0.6 0.28 0 1 -0 -0.6 0 2.6 0.56 0.24 0 1 -0 -1 0 2.6 0.6 0.24 0 1 -0 -1.4 0 2.2 0.64 0.28 0 1 -0 -1 0 2.2 0.6 0.28 0 1 -0 -1.4 0 2.6 0.64 0.24 0 1 -0 -1.4 0 2.2 0.64 0.28 0 1 -0 -1 0 2.6 0.6 0.24 0 1 -0 -1.4 0 2.6 0.64 0.24 0 1 -0 -1.8 0 2.2 0.68 0.28 0 1 -0 -1.4 0 2.2 0.64 0.28 0 1 -0 -1.8 0 2.6 0.68 0.24 0 1 -0 -1.8 0 2.2 0.68 0.28 0 1 -0 -1.4 0 2.6 0.64 0.24 0 1 -0 -1.8 0 2.6 0.68 0.24 0 1 -0 -2.2 0 2.2 0.72 0.28 0 1 -0 -1.8 0 2.2 0.68 0.28 0 1 -0 -2.2 0 2.6 0.72 0.24 0 1 -0 -2.2 0 2.2 0.72 0.28 0 1 -0 -1.8 0 2.6 0.68 0.24 0 1 -0 -2.2 0 2.6 0.72 0.24 0 1 -0 -2.6 0 2.2 0.76 0.28 0 1 -0 -2.2 0 2.2 0.72 0.28 0 1 -0 -2.6 0 2.6 0.76 0.24 0 1 -0 -2.6 0 2.2 0.76 0.28 0 1 -0 -2.2 0 2.6 0.72 0.24 0 1 -0 -2.6 0 2.6 0.76 0.24 0 1 -0 -3 0 2.2 0.8 0.28 0 1 -0 -2.6 0 2.2 0.76 0.28 0 1 -0 -3 0 2.6 0.8 0.24 0 1 -0 -3 0 2.2 0.8 0.28 0 1 -0 -2.6 0 2.6 0.76 0.24 0 1 -0 -3 0 2.6 0.8 0.24 0 1 -0 -3.4 0 2.2 0.84 0.28 0 1 -0 -3 0 2.2 0.8 0.28 0 1 -0 -3.4 0 2.6 0.84 0.24 0 1 -0 -3.4 0 2.2 0.84 0.28 0 1 -0 -3 0 2.6 0.8 0.24 0 1 -0 -3.4 0 2.6 0.84 0.24 0 1 -0 -3.8 0 2.2 0.88 0.28 0 1 -0 -3.4 0 2.2 0.84 0.28 0 1 -0 -3.8 0 2.6 0.88 0.24 0 1 -0 -3.8 0 2.2 0.88 0.28 0 1 -0 -3.4 0 2.6 0.84 0.24 0 1 -0 -3.8 0 2.6 0.88 0.24 0 1 -0 -4.2 0 2.2 0.92 0.28 0 1 -0 -3.8 0 2.2 0.88 0.28 0 1 -0 -4.2 0 2.6 0.92 0.24 0 1 -0 -4.2 0 2.2 0.92 0.28 0 1 -0 -3.8 0 2.6 0.88 0.24 0 1 -0 -4.2 0 2.6 0.92 0.24 0 1 -0 -4.6 0 2.2 0.96 0.28 0 1 -0 -4.2 0 2.2 0.92 0.28 0 1 -0 -4.6 0 2.6 0.96 0.24 0 1 -0 -4.6 0 2.2 0.96 0.28 0 1 -0 -4.2 0 2.6 0.92 0.24 0 1 -0 -4.6 0 2.6 0.96 0.24 0 1 -0 -5 0 2.2 1 0.28 0 1 -0 -4.6 0 2.2 0.96 0.28 0 1 -0 -5 0 2.6 1 0.24 0 1 -0 -5 0 2.2 1 0.28 0 1 -0 -4.6 0 2.6 0.96 0.24 0 1 -0 --5 0 3 0 0.2 0 1 -0 --4.6 0 2.6 0.04 0.24 0 1 -0 --5 0 2.6 0 0.24 0 1 -0 --4.6 0 3 0.04 0.2 0 1 -0 --4.6 0 2.6 0.04 0.24 0 1 -0 --5 0 3 0 0.2 0 1 -0 --4.6 0 3 0.04 0.2 0 1 -0 --4.2 0 2.6 0.08 0.24 0 1 -0 --4.6 0 2.6 0.04 0.24 0 1 -0 --4.2 0 3 0.08 0.2 0 1 -0 --4.2 0 2.6 0.08 0.24 0 1 -0 --4.6 0 3 0.04 0.2 0 1 -0 --4.2 0 3 0.08 0.2 0 1 -0 --3.8 0 2.6 0.12 0.24 0 1 -0 --4.2 0 2.6 0.08 0.24 0 1 -0 --3.8 0 3 0.12 0.2 0 1 -0 --3.8 0 2.6 0.12 0.24 0 1 -0 --4.2 0 3 0.08 0.2 0 1 -0 --3.8 0 3 0.12 0.2 0 1 -0 --3.4 0 2.6 0.16 0.24 0 1 -0 --3.8 0 2.6 0.12 0.24 0 1 -0 --3.4 0 3 0.16 0.2 0 1 -0 --3.4 0 2.6 0.16 0.24 0 1 -0 --3.8 0 3 0.12 0.2 0 1 -0 --3.4 0 3 0.16 0.2 0 1 -0 --3 0 2.6 0.2 0.24 0 1 -0 --3.4 0 2.6 0.16 0.24 0 1 -0 --3 0 3 0.2 0.2 0 1 -0 --3 0 2.6 0.2 0.24 0 1 -0 --3.4 0 3 0.16 0.2 0 1 -0 --3 0 3 0.2 0.2 0 1 -0 --2.6 0 2.6 0.24 0.24 0 1 -0 --3 0 2.6 0.2 0.24 0 1 -0 --2.6 0 3 0.24 0.2 0 1 -0 --2.6 0 2.6 0.24 0.24 0 1 -0 --3 0 3 0.2 0.2 0 1 -0 --2.6 0 3 0.24 0.2 0 1 -0 --2.2 0 2.6 0.28 0.24 0 1 -0 --2.6 0 2.6 0.24 0.24 0 1 -0 --2.2 0 3 0.28 0.2 0 1 -0 --2.2 0 2.6 0.28 0.24 0 1 -0 --2.6 0 3 0.24 0.2 0 1 -0 --2.2 0 3 0.28 0.2 0 1 -0 --1.8 0 2.6 0.32 0.24 0 1 -0 --2.2 0 2.6 0.28 0.24 0 1 -0 --1.8 0 3 0.32 0.2 0 1 -0 --1.8 0 2.6 0.32 0.24 0 1 -0 --2.2 0 3 0.28 0.2 0 1 -0 --1.8 0 3 0.32 0.2 0 1 -0 --1.4 0 2.6 0.36 0.24 0 1 -0 --1.8 0 2.6 0.32 0.24 0 1 -0 --1.4 0 3 0.36 0.2 0 1 -0 --1.4 0 2.6 0.36 0.24 0 1 -0 --1.8 0 3 0.32 0.2 0 1 -0 --1.4 0 3 0.36 0.2 0 1 -0 --1 0 2.6 0.4 0.24 0 1 -0 --1.4 0 2.6 0.36 0.24 0 1 -0 --1 0 3 0.4 0.2 0 1 -0 --1 0 2.6 0.4 0.24 0 1 -0 --1.4 0 3 0.36 0.2 0 1 -0 --1 0 3 0.4 0.2 0 1 -0 --0.6 0 2.6 0.44 0.24 0 1 -0 --1 0 2.6 0.4 0.24 0 1 -0 --0.6 0 3 0.44 0.2 0 1 -0 --0.6 0 2.6 0.44 0.24 0 1 -0 --1 0 3 0.4 0.2 0 1 -0 --0.6 0 3 0.44 0.2 0 1 -0 --0.2 0 2.6 0.48 0.24 0 1 -0 --0.6 0 2.6 0.44 0.24 0 1 -0 --0.2 0 3 0.48 0.2 0 1 -0 --0.2 0 2.6 0.48 0.24 0 1 -0 --0.6 0 3 0.44 0.2 0 1 -0 --0.2 0 3 0.48 0.2 0 1 -0 -0.2 0 2.6 0.52 0.24 0 1 -0 --0.2 0 2.6 0.48 0.24 0 1 -0 -0.2 0 3 0.52 0.2 0 1 -0 -0.2 0 2.6 0.52 0.24 0 1 -0 --0.2 0 3 0.48 0.2 0 1 -0 -0.2 0 3 0.52 0.2 0 1 -0 -0.6 0 2.6 0.56 0.24 0 1 -0 -0.2 0 2.6 0.52 0.24 0 1 -0 -0.6 0 3 0.56 0.2 0 1 -0 -0.6 0 2.6 0.56 0.24 0 1 -0 -0.2 0 3 0.52 0.2 0 1 -0 -0.6 0 3 0.56 0.2 0 1 -0 -1 0 2.6 0.6 0.24 0 1 -0 -0.6 0 2.6 0.56 0.24 0 1 -0 -1 0 3 0.6 0.2 0 1 -0 -1 0 2.6 0.6 0.24 0 1 -0 -0.6 0 3 0.56 0.2 0 1 -0 -1 0 3 0.6 0.2 0 1 -0 -1.4 0 2.6 0.64 0.24 0 1 -0 -1 0 2.6 0.6 0.24 0 1 -0 -1.4 0 3 0.64 0.2 0 1 -0 -1.4 0 2.6 0.64 0.24 0 1 -0 -1 0 3 0.6 0.2 0 1 -0 -1.4 0 3 0.64 0.2 0 1 -0 -1.8 0 2.6 0.68 0.24 0 1 -0 -1.4 0 2.6 0.64 0.24 0 1 -0 -1.8 0 3 0.68 0.2 0 1 -0 -1.8 0 2.6 0.68 0.24 0 1 -0 -1.4 0 3 0.64 0.2 0 1 -0 -1.8 0 3 0.68 0.2 0 1 -0 -2.2 0 2.6 0.72 0.24 0 1 -0 -1.8 0 2.6 0.68 0.24 0 1 -0 -2.2 0 3 0.72 0.2 0 1 -0 -2.2 0 2.6 0.72 0.24 0 1 -0 -1.8 0 3 0.68 0.2 0 1 -0 -2.2 0 3 0.72 0.2 0 1 -0 -2.6 0 2.6 0.76 0.24 0 1 -0 -2.2 0 2.6 0.72 0.24 0 1 -0 -2.6 0 3 0.76 0.2 0 1 -0 -2.6 0 2.6 0.76 0.24 0 1 -0 -2.2 0 3 0.72 0.2 0 1 -0 -2.6 0 3 0.76 0.2 0 1 -0 -3 0 2.6 0.8 0.24 0 1 -0 -2.6 0 2.6 0.76 0.24 0 1 -0 -3 0 3 0.8 0.2 0 1 -0 -3 0 2.6 0.8 0.24 0 1 -0 -2.6 0 3 0.76 0.2 0 1 -0 -3 0 3 0.8 0.2 0 1 -0 -3.4 0 2.6 0.84 0.24 0 1 -0 -3 0 2.6 0.8 0.24 0 1 -0 -3.4 0 3 0.84 0.2 0 1 -0 -3.4 0 2.6 0.84 0.24 0 1 -0 -3 0 3 0.8 0.2 0 1 -0 -3.4 0 3 0.84 0.2 0 1 -0 -3.8 0 2.6 0.88 0.24 0 1 -0 -3.4 0 2.6 0.84 0.24 0 1 -0 -3.8 0 3 0.88 0.2 0 1 -0 -3.8 0 2.6 0.88 0.24 0 1 -0 -3.4 0 3 0.84 0.2 0 1 -0 -3.8 0 3 0.88 0.2 0 1 -0 -4.2 0 2.6 0.92 0.24 0 1 -0 -3.8 0 2.6 0.88 0.24 0 1 -0 -4.2 0 3 0.92 0.2 0 1 -0 -4.2 0 2.6 0.92 0.24 0 1 -0 -3.8 0 3 0.88 0.2 0 1 -0 -4.2 0 3 0.92 0.2 0 1 -0 -4.6 0 2.6 0.96 0.24 0 1 -0 -4.2 0 2.6 0.92 0.24 0 1 -0 -4.6 0 3 0.96 0.2 0 1 -0 -4.6 0 2.6 0.96 0.24 0 1 -0 -4.2 0 3 0.92 0.2 0 1 -0 -4.6 0 3 0.96 0.2 0 1 -0 -5 0 2.6 1 0.24 0 1 -0 -4.6 0 2.6 0.96 0.24 0 1 -0 -5 0 3 1 0.2 0 1 -0 -5 0 2.6 1 0.24 0 1 -0 -4.6 0 3 0.96 0.2 0 1 -0 --5 0 3.4 0 0.16 0 1 -0 --4.6 0 3 0.04 0.2 0 1 -0 --5 0 3 0 0.2 0 1 -0 --4.6 0 3.4 0.04 0.16 0 1 -0 --4.6 0 3 0.04 0.2 0 1 -0 --5 0 3.4 0 0.16 0 1 -0 --4.6 0 3.4 0.04 0.16 0 1 -0 --4.2 0 3 0.08 0.2 0 1 -0 --4.6 0 3 0.04 0.2 0 1 -0 --4.2 0 3.4 0.08 0.16 0 1 -0 --4.2 0 3 0.08 0.2 0 1 -0 --4.6 0 3.4 0.04 0.16 0 1 -0 --4.2 0 3.4 0.08 0.16 0 1 -0 --3.8 0 3 0.12 0.2 0 1 -0 --4.2 0 3 0.08 0.2 0 1 -0 --3.8 0 3.4 0.12 0.16 0 1 -0 --3.8 0 3 0.12 0.2 0 1 -0 --4.2 0 3.4 0.08 0.16 0 1 -0 --3.8 0 3.4 0.12 0.16 0 1 -0 --3.4 0 3 0.16 0.2 0 1 -0 --3.8 0 3 0.12 0.2 0 1 -0 --3.4 0 3.4 0.16 0.16 0 1 -0 --3.4 0 3 0.16 0.2 0 1 -0 --3.8 0 3.4 0.12 0.16 0 1 -0 --3.4 0 3.4 0.16 0.16 0 1 -0 --3 0 3 0.2 0.2 0 1 -0 --3.4 0 3 0.16 0.2 0 1 -0 --3 0 3.4 0.2 0.16 0 1 -0 --3 0 3 0.2 0.2 0 1 -0 --3.4 0 3.4 0.16 0.16 0 1 -0 --3 0 3.4 0.2 0.16 0 1 -0 --2.6 0 3 0.24 0.2 0 1 -0 --3 0 3 0.2 0.2 0 1 -0 --2.6 0 3.4 0.24 0.16 0 1 -0 --2.6 0 3 0.24 0.2 0 1 -0 --3 0 3.4 0.2 0.16 0 1 -0 --2.6 0 3.4 0.24 0.16 0 1 -0 --2.2 0 3 0.28 0.2 0 1 -0 --2.6 0 3 0.24 0.2 0 1 -0 --2.2 0 3.4 0.28 0.16 0 1 -0 --2.2 0 3 0.28 0.2 0 1 -0 --2.6 0 3.4 0.24 0.16 0 1 -0 --2.2 0 3.4 0.28 0.16 0 1 -0 --1.8 0 3 0.32 0.2 0 1 -0 --2.2 0 3 0.28 0.2 0 1 -0 --1.8 0 3.4 0.32 0.16 0 1 -0 --1.8 0 3 0.32 0.2 0 1 -0 --2.2 0 3.4 0.28 0.16 0 1 -0 --1.8 0 3.4 0.32 0.16 0 1 -0 --1.4 0 3 0.36 0.2 0 1 -0 --1.8 0 3 0.32 0.2 0 1 -0 --1.4 0 3.4 0.36 0.16 0 1 -0 --1.4 0 3 0.36 0.2 0 1 -0 --1.8 0 3.4 0.32 0.16 0 1 -0 --1.4 0 3.4 0.36 0.16 0 1 -0 --1 0 3 0.4 0.2 0 1 -0 --1.4 0 3 0.36 0.2 0 1 -0 --1 0 3.4 0.4 0.16 0 1 -0 --1 0 3 0.4 0.2 0 1 -0 --1.4 0 3.4 0.36 0.16 0 1 -0 --1 0 3.4 0.4 0.16 0 1 -0 --0.6 0 3 0.44 0.2 0 1 -0 --1 0 3 0.4 0.2 0 1 -0 --0.6 0 3.4 0.44 0.16 0 1 -0 --0.6 0 3 0.44 0.2 0 1 -0 --1 0 3.4 0.4 0.16 0 1 -0 --0.6 0 3.4 0.44 0.16 0 1 -0 --0.2 0 3 0.48 0.2 0 1 -0 --0.6 0 3 0.44 0.2 0 1 -0 --0.2 0 3.4 0.48 0.16 0 1 -0 --0.2 0 3 0.48 0.2 0 1 -0 --0.6 0 3.4 0.44 0.16 0 1 -0 --0.2 0 3.4 0.48 0.16 0 1 -0 -0.2 0 3 0.52 0.2 0 1 -0 --0.2 0 3 0.48 0.2 0 1 -0 -0.2 0 3.4 0.52 0.16 0 1 -0 -0.2 0 3 0.52 0.2 0 1 -0 --0.2 0 3.4 0.48 0.16 0 1 -0 -0.2 0 3.4 0.52 0.16 0 1 -0 -0.6 0 3 0.56 0.2 0 1 -0 -0.2 0 3 0.52 0.2 0 1 -0 -0.6 0 3.4 0.56 0.16 0 1 -0 -0.6 0 3 0.56 0.2 0 1 -0 -0.2 0 3.4 0.52 0.16 0 1 -0 -0.6 0 3.4 0.56 0.16 0 1 -0 -1 0 3 0.6 0.2 0 1 -0 -0.6 0 3 0.56 0.2 0 1 -0 -1 0 3.4 0.6 0.16 0 1 -0 -1 0 3 0.6 0.2 0 1 -0 -0.6 0 3.4 0.56 0.16 0 1 -0 -1 0 3.4 0.6 0.16 0 1 -0 -1.4 0 3 0.64 0.2 0 1 -0 -1 0 3 0.6 0.2 0 1 -0 -1.4 0 3.4 0.64 0.16 0 1 -0 -1.4 0 3 0.64 0.2 0 1 -0 -1 0 3.4 0.6 0.16 0 1 -0 -1.4 0 3.4 0.64 0.16 0 1 -0 -1.8 0 3 0.68 0.2 0 1 -0 -1.4 0 3 0.64 0.2 0 1 -0 -1.8 0 3.4 0.68 0.16 0 1 -0 -1.8 0 3 0.68 0.2 0 1 -0 -1.4 0 3.4 0.64 0.16 0 1 -0 -1.8 0 3.4 0.68 0.16 0 1 -0 -2.2 0 3 0.72 0.2 0 1 -0 -1.8 0 3 0.68 0.2 0 1 -0 -2.2 0 3.4 0.72 0.16 0 1 -0 -2.2 0 3 0.72 0.2 0 1 -0 -1.8 0 3.4 0.68 0.16 0 1 -0 -2.2 0 3.4 0.72 0.16 0 1 -0 -2.6 0 3 0.76 0.2 0 1 -0 -2.2 0 3 0.72 0.2 0 1 -0 -2.6 0 3.4 0.76 0.16 0 1 -0 -2.6 0 3 0.76 0.2 0 1 -0 -2.2 0 3.4 0.72 0.16 0 1 -0 -2.6 0 3.4 0.76 0.16 0 1 -0 -3 0 3 0.8 0.2 0 1 -0 -2.6 0 3 0.76 0.2 0 1 -0 -3 0 3.4 0.8 0.16 0 1 -0 -3 0 3 0.8 0.2 0 1 -0 -2.6 0 3.4 0.76 0.16 0 1 -0 -3 0 3.4 0.8 0.16 0 1 -0 -3.4 0 3 0.84 0.2 0 1 -0 -3 0 3 0.8 0.2 0 1 -0 -3.4 0 3.4 0.84 0.16 0 1 -0 -3.4 0 3 0.84 0.2 0 1 -0 -3 0 3.4 0.8 0.16 0 1 -0 -3.4 0 3.4 0.84 0.16 0 1 -0 -3.8 0 3 0.88 0.2 0 1 -0 -3.4 0 3 0.84 0.2 0 1 -0 -3.8 0 3.4 0.88 0.16 0 1 -0 -3.8 0 3 0.88 0.2 0 1 -0 -3.4 0 3.4 0.84 0.16 0 1 -0 -3.8 0 3.4 0.88 0.16 0 1 -0 -4.2 0 3 0.92 0.2 0 1 -0 -3.8 0 3 0.88 0.2 0 1 -0 -4.2 0 3.4 0.92 0.16 0 1 -0 -4.2 0 3 0.92 0.2 0 1 -0 -3.8 0 3.4 0.88 0.16 0 1 -0 -4.2 0 3.4 0.92 0.16 0 1 -0 -4.6 0 3 0.96 0.2 0 1 -0 -4.2 0 3 0.92 0.2 0 1 -0 -4.6 0 3.4 0.96 0.16 0 1 -0 -4.6 0 3 0.96 0.2 0 1 -0 -4.2 0 3.4 0.92 0.16 0 1 -0 -4.6 0 3.4 0.96 0.16 0 1 -0 -5 0 3 1 0.2 0 1 -0 -4.6 0 3 0.96 0.2 0 1 -0 -5 0 3.4 1 0.16 0 1 -0 -5 0 3 1 0.2 0 1 -0 -4.6 0 3.4 0.96 0.16 0 1 -0 --5 0 3.8 0 0.12 0 1 -0 --4.6 0 3.4 0.04 0.16 0 1 -0 --5 0 3.4 0 0.16 0 1 -0 --4.6 0 3.8 0.04 0.12 0 1 -0 --4.6 0 3.4 0.04 0.16 0 1 -0 --5 0 3.8 0 0.12 0 1 -0 --4.6 0 3.8 0.04 0.12 0 1 -0 --4.2 0 3.4 0.08 0.16 0 1 -0 --4.6 0 3.4 0.04 0.16 0 1 -0 --4.2 0 3.8 0.08 0.12 0 1 -0 --4.2 0 3.4 0.08 0.16 0 1 -0 --4.6 0 3.8 0.04 0.12 0 1 -0 --4.2 0 3.8 0.08 0.12 0 1 -0 --3.8 0 3.4 0.12 0.16 0 1 -0 --4.2 0 3.4 0.08 0.16 0 1 -0 --3.8 0 3.8 0.12 0.12 0 1 -0 --3.8 0 3.4 0.12 0.16 0 1 -0 --4.2 0 3.8 0.08 0.12 0 1 -0 --3.8 0 3.8 0.12 0.12 0 1 -0 --3.4 0 3.4 0.16 0.16 0 1 -0 --3.8 0 3.4 0.12 0.16 0 1 -0 --3.4 0 3.8 0.16 0.12 0 1 -0 --3.4 0 3.4 0.16 0.16 0 1 -0 --3.8 0 3.8 0.12 0.12 0 1 -0 --3.4 0 3.8 0.16 0.12 0 1 -0 --3 0 3.4 0.2 0.16 0 1 -0 --3.4 0 3.4 0.16 0.16 0 1 -0 --3 0 3.8 0.2 0.12 0 1 -0 --3 0 3.4 0.2 0.16 0 1 -0 --3.4 0 3.8 0.16 0.12 0 1 -0 --3 0 3.8 0.2 0.12 0 1 -0 --2.6 0 3.4 0.24 0.16 0 1 -0 --3 0 3.4 0.2 0.16 0 1 -0 --2.6 0 3.8 0.24 0.12 0 1 -0 --2.6 0 3.4 0.24 0.16 0 1 -0 --3 0 3.8 0.2 0.12 0 1 -0 --2.6 0 3.8 0.24 0.12 0 1 -0 --2.2 0 3.4 0.28 0.16 0 1 -0 --2.6 0 3.4 0.24 0.16 0 1 -0 --2.2 0 3.8 0.28 0.12 0 1 -0 --2.2 0 3.4 0.28 0.16 0 1 -0 --2.6 0 3.8 0.24 0.12 0 1 -0 --2.2 0 3.8 0.28 0.12 0 1 -0 --1.8 0 3.4 0.32 0.16 0 1 -0 --2.2 0 3.4 0.28 0.16 0 1 -0 --1.8 0 3.8 0.32 0.12 0 1 -0 --1.8 0 3.4 0.32 0.16 0 1 -0 --2.2 0 3.8 0.28 0.12 0 1 -0 --1.8 0 3.8 0.32 0.12 0 1 -0 --1.4 0 3.4 0.36 0.16 0 1 -0 --1.8 0 3.4 0.32 0.16 0 1 -0 --1.4 0 3.8 0.36 0.12 0 1 -0 --1.4 0 3.4 0.36 0.16 0 1 -0 --1.8 0 3.8 0.32 0.12 0 1 -0 --1.4 0 3.8 0.36 0.12 0 1 -0 --1 0 3.4 0.4 0.16 0 1 -0 --1.4 0 3.4 0.36 0.16 0 1 -0 --1 0 3.8 0.4 0.12 0 1 -0 --1 0 3.4 0.4 0.16 0 1 -0 --1.4 0 3.8 0.36 0.12 0 1 -0 --1 0 3.8 0.4 0.12 0 1 -0 --0.6 0 3.4 0.44 0.16 0 1 -0 --1 0 3.4 0.4 0.16 0 1 -0 --0.6 0 3.8 0.44 0.12 0 1 -0 --0.6 0 3.4 0.44 0.16 0 1 -0 --1 0 3.8 0.4 0.12 0 1 -0 --0.6 0 3.8 0.44 0.12 0 1 -0 --0.2 0 3.4 0.48 0.16 0 1 -0 --0.6 0 3.4 0.44 0.16 0 1 -0 --0.2 0 3.8 0.48 0.12 0 1 -0 --0.2 0 3.4 0.48 0.16 0 1 -0 --0.6 0 3.8 0.44 0.12 0 1 -0 --0.2 0 3.8 0.48 0.12 0 1 -0 -0.2 0 3.4 0.52 0.16 0 1 -0 --0.2 0 3.4 0.48 0.16 0 1 -0 -0.2 0 3.8 0.52 0.12 0 1 -0 -0.2 0 3.4 0.52 0.16 0 1 -0 --0.2 0 3.8 0.48 0.12 0 1 -0 -0.2 0 3.8 0.52 0.12 0 1 -0 -0.6 0 3.4 0.56 0.16 0 1 -0 -0.2 0 3.4 0.52 0.16 0 1 -0 -0.6 0 3.8 0.56 0.12 0 1 -0 -0.6 0 3.4 0.56 0.16 0 1 -0 -0.2 0 3.8 0.52 0.12 0 1 -0 -0.6 0 3.8 0.56 0.12 0 1 -0 -1 0 3.4 0.6 0.16 0 1 -0 -0.6 0 3.4 0.56 0.16 0 1 -0 -1 0 3.8 0.6 0.12 0 1 -0 -1 0 3.4 0.6 0.16 0 1 -0 -0.6 0 3.8 0.56 0.12 0 1 -0 -1 0 3.8 0.6 0.12 0 1 -0 -1.4 0 3.4 0.64 0.16 0 1 -0 -1 0 3.4 0.6 0.16 0 1 -0 -1.4 0 3.8 0.64 0.12 0 1 -0 -1.4 0 3.4 0.64 0.16 0 1 -0 -1 0 3.8 0.6 0.12 0 1 -0 -1.4 0 3.8 0.64 0.12 0 1 -0 -1.8 0 3.4 0.68 0.16 0 1 -0 -1.4 0 3.4 0.64 0.16 0 1 -0 -1.8 0 3.8 0.68 0.12 0 1 -0 -1.8 0 3.4 0.68 0.16 0 1 -0 -1.4 0 3.8 0.64 0.12 0 1 -0 -1.8 0 3.8 0.68 0.12 0 1 -0 -2.2 0 3.4 0.72 0.16 0 1 -0 -1.8 0 3.4 0.68 0.16 0 1 -0 -2.2 0 3.8 0.72 0.12 0 1 -0 -2.2 0 3.4 0.72 0.16 0 1 -0 -1.8 0 3.8 0.68 0.12 0 1 -0 -2.2 0 3.8 0.72 0.12 0 1 -0 -2.6 0 3.4 0.76 0.16 0 1 -0 -2.2 0 3.4 0.72 0.16 0 1 -0 -2.6 0 3.8 0.76 0.12 0 1 -0 -2.6 0 3.4 0.76 0.16 0 1 -0 -2.2 0 3.8 0.72 0.12 0 1 -0 -2.6 0 3.8 0.76 0.12 0 1 -0 -3 0 3.4 0.8 0.16 0 1 -0 -2.6 0 3.4 0.76 0.16 0 1 -0 -3 0 3.8 0.8 0.12 0 1 -0 -3 0 3.4 0.8 0.16 0 1 -0 -2.6 0 3.8 0.76 0.12 0 1 -0 -3 0 3.8 0.8 0.12 0 1 -0 -3.4 0 3.4 0.84 0.16 0 1 -0 -3 0 3.4 0.8 0.16 0 1 -0 -3.4 0 3.8 0.84 0.12 0 1 -0 -3.4 0 3.4 0.84 0.16 0 1 -0 -3 0 3.8 0.8 0.12 0 1 -0 -3.4 0 3.8 0.84 0.12 0 1 -0 -3.8 0 3.4 0.88 0.16 0 1 -0 -3.4 0 3.4 0.84 0.16 0 1 -0 -3.8 0 3.8 0.88 0.12 0 1 -0 -3.8 0 3.4 0.88 0.16 0 1 -0 -3.4 0 3.8 0.84 0.12 0 1 -0 -3.8 0 3.8 0.88 0.12 0 1 -0 -4.2 0 3.4 0.92 0.16 0 1 -0 -3.8 0 3.4 0.88 0.16 0 1 -0 -4.2 0 3.8 0.92 0.12 0 1 -0 -4.2 0 3.4 0.92 0.16 0 1 -0 -3.8 0 3.8 0.88 0.12 0 1 -0 -4.2 0 3.8 0.92 0.12 0 1 -0 -4.6 0 3.4 0.96 0.16 0 1 -0 -4.2 0 3.4 0.92 0.16 0 1 -0 -4.6 0 3.8 0.96 0.12 0 1 -0 -4.6 0 3.4 0.96 0.16 0 1 -0 -4.2 0 3.8 0.92 0.12 0 1 -0 -4.6 0 3.8 0.96 0.12 0 1 -0 -5 0 3.4 1 0.16 0 1 -0 -4.6 0 3.4 0.96 0.16 0 1 -0 -5 0 3.8 1 0.12 0 1 -0 -5 0 3.4 1 0.16 0 1 -0 -4.6 0 3.8 0.96 0.12 0 1 -0 --5 0 4.2 0 0.08 0 1 -0 --4.6 0 3.8 0.04 0.12 0 1 -0 --5 0 3.8 0 0.12 0 1 -0 --4.6 0 4.2 0.04 0.08 0 1 -0 --4.6 0 3.8 0.04 0.12 0 1 -0 --5 0 4.2 0 0.08 0 1 -0 --4.6 0 4.2 0.04 0.08 0 1 -0 --4.2 0 3.8 0.08 0.12 0 1 -0 --4.6 0 3.8 0.04 0.12 0 1 -0 --4.2 0 4.2 0.08 0.08 0 1 -0 --4.2 0 3.8 0.08 0.12 0 1 -0 --4.6 0 4.2 0.04 0.08 0 1 -0 --4.2 0 4.2 0.08 0.08 0 1 -0 --3.8 0 3.8 0.12 0.12 0 1 -0 --4.2 0 3.8 0.08 0.12 0 1 -0 --3.8 0 4.2 0.12 0.08 0 1 -0 --3.8 0 3.8 0.12 0.12 0 1 -0 --4.2 0 4.2 0.08 0.08 0 1 -0 --3.8 0 4.2 0.12 0.08 0 1 -0 --3.4 0 3.8 0.16 0.12 0 1 -0 --3.8 0 3.8 0.12 0.12 0 1 -0 --3.4 0 4.2 0.16 0.08 0 1 -0 --3.4 0 3.8 0.16 0.12 0 1 -0 --3.8 0 4.2 0.12 0.08 0 1 -0 --3.4 0 4.2 0.16 0.08 0 1 -0 --3 0 3.8 0.2 0.12 0 1 -0 --3.4 0 3.8 0.16 0.12 0 1 -0 --3 0 4.2 0.2 0.08 0 1 -0 --3 0 3.8 0.2 0.12 0 1 -0 --3.4 0 4.2 0.16 0.08 0 1 -0 --3 0 4.2 0.2 0.08 0 1 -0 --2.6 0 3.8 0.24 0.12 0 1 -0 --3 0 3.8 0.2 0.12 0 1 -0 --2.6 0 4.2 0.24 0.08 0 1 -0 --2.6 0 3.8 0.24 0.12 0 1 -0 --3 0 4.2 0.2 0.08 0 1 -0 --2.6 0 4.2 0.24 0.08 0 1 -0 --2.2 0 3.8 0.28 0.12 0 1 -0 --2.6 0 3.8 0.24 0.12 0 1 -0 --2.2 0 4.2 0.28 0.08 0 1 -0 --2.2 0 3.8 0.28 0.12 0 1 -0 --2.6 0 4.2 0.24 0.08 0 1 -0 --2.2 0 4.2 0.28 0.08 0 1 -0 --1.8 0 3.8 0.32 0.12 0 1 -0 --2.2 0 3.8 0.28 0.12 0 1 -0 --1.8 0 4.2 0.32 0.08 0 1 -0 --1.8 0 3.8 0.32 0.12 0 1 -0 --2.2 0 4.2 0.28 0.08 0 1 -0 --1.8 0 4.2 0.32 0.08 0 1 -0 --1.4 0 3.8 0.36 0.12 0 1 -0 --1.8 0 3.8 0.32 0.12 0 1 -0 --1.4 0 4.2 0.36 0.08 0 1 -0 --1.4 0 3.8 0.36 0.12 0 1 -0 --1.8 0 4.2 0.32 0.08 0 1 -0 --1.4 0 4.2 0.36 0.08 0 1 -0 --1 0 3.8 0.4 0.12 0 1 -0 --1.4 0 3.8 0.36 0.12 0 1 -0 --1 0 4.2 0.4 0.08 0 1 -0 --1 0 3.8 0.4 0.12 0 1 -0 --1.4 0 4.2 0.36 0.08 0 1 -0 --1 0 4.2 0.4 0.08 0 1 -0 --0.6 0 3.8 0.44 0.12 0 1 -0 --1 0 3.8 0.4 0.12 0 1 -0 --0.6 0 4.2 0.44 0.08 0 1 -0 --0.6 0 3.8 0.44 0.12 0 1 -0 --1 0 4.2 0.4 0.08 0 1 -0 --0.6 0 4.2 0.44 0.08 0 1 -0 --0.2 0 3.8 0.48 0.12 0 1 -0 --0.6 0 3.8 0.44 0.12 0 1 -0 --0.2 0 4.2 0.48 0.08 0 1 -0 --0.2 0 3.8 0.48 0.12 0 1 -0 --0.6 0 4.2 0.44 0.08 0 1 -0 --0.2 0 4.2 0.48 0.08 0 1 -0 -0.2 0 3.8 0.52 0.12 0 1 -0 --0.2 0 3.8 0.48 0.12 0 1 -0 -0.2 0 4.2 0.52 0.08 0 1 -0 -0.2 0 3.8 0.52 0.12 0 1 -0 --0.2 0 4.2 0.48 0.08 0 1 -0 -0.2 0 4.2 0.52 0.08 0 1 -0 -0.6 0 3.8 0.56 0.12 0 1 -0 -0.2 0 3.8 0.52 0.12 0 1 -0 -0.6 0 4.2 0.56 0.08 0 1 -0 -0.6 0 3.8 0.56 0.12 0 1 -0 -0.2 0 4.2 0.52 0.08 0 1 -0 -0.6 0 4.2 0.56 0.08 0 1 -0 -1 0 3.8 0.6 0.12 0 1 -0 -0.6 0 3.8 0.56 0.12 0 1 -0 -1 0 4.2 0.6 0.08 0 1 -0 -1 0 3.8 0.6 0.12 0 1 -0 -0.6 0 4.2 0.56 0.08 0 1 -0 -1 0 4.2 0.6 0.08 0 1 -0 -1.4 0 3.8 0.64 0.12 0 1 -0 -1 0 3.8 0.6 0.12 0 1 -0 -1.4 0 4.2 0.64 0.08 0 1 -0 -1.4 0 3.8 0.64 0.12 0 1 -0 -1 0 4.2 0.6 0.08 0 1 -0 -1.4 0 4.2 0.64 0.08 0 1 -0 -1.8 0 3.8 0.68 0.12 0 1 -0 -1.4 0 3.8 0.64 0.12 0 1 -0 -1.8 0 4.2 0.68 0.08 0 1 -0 -1.8 0 3.8 0.68 0.12 0 1 -0 -1.4 0 4.2 0.64 0.08 0 1 -0 -1.8 0 4.2 0.68 0.08 0 1 -0 -2.2 0 3.8 0.72 0.12 0 1 -0 -1.8 0 3.8 0.68 0.12 0 1 -0 -2.2 0 4.2 0.72 0.08 0 1 -0 -2.2 0 3.8 0.72 0.12 0 1 -0 -1.8 0 4.2 0.68 0.08 0 1 -0 -2.2 0 4.2 0.72 0.08 0 1 -0 -2.6 0 3.8 0.76 0.12 0 1 -0 -2.2 0 3.8 0.72 0.12 0 1 -0 -2.6 0 4.2 0.76 0.08 0 1 -0 -2.6 0 3.8 0.76 0.12 0 1 -0 -2.2 0 4.2 0.72 0.08 0 1 -0 -2.6 0 4.2 0.76 0.08 0 1 -0 -3 0 3.8 0.8 0.12 0 1 -0 -2.6 0 3.8 0.76 0.12 0 1 -0 -3 0 4.2 0.8 0.08 0 1 -0 -3 0 3.8 0.8 0.12 0 1 -0 -2.6 0 4.2 0.76 0.08 0 1 -0 -3 0 4.2 0.8 0.08 0 1 -0 -3.4 0 3.8 0.84 0.12 0 1 -0 -3 0 3.8 0.8 0.12 0 1 -0 -3.4 0 4.2 0.84 0.08 0 1 -0 -3.4 0 3.8 0.84 0.12 0 1 -0 -3 0 4.2 0.8 0.08 0 1 -0 -3.4 0 4.2 0.84 0.08 0 1 -0 -3.8 0 3.8 0.88 0.12 0 1 -0 -3.4 0 3.8 0.84 0.12 0 1 -0 -3.8 0 4.2 0.88 0.08 0 1 -0 -3.8 0 3.8 0.88 0.12 0 1 -0 -3.4 0 4.2 0.84 0.08 0 1 -0 -3.8 0 4.2 0.88 0.08 0 1 -0 -4.2 0 3.8 0.92 0.12 0 1 -0 -3.8 0 3.8 0.88 0.12 0 1 -0 -4.2 0 4.2 0.92 0.08 0 1 -0 -4.2 0 3.8 0.92 0.12 0 1 -0 -3.8 0 4.2 0.88 0.08 0 1 -0 -4.2 0 4.2 0.92 0.08 0 1 -0 -4.6 0 3.8 0.96 0.12 0 1 -0 -4.2 0 3.8 0.92 0.12 0 1 -0 -4.6 0 4.2 0.96 0.08 0 1 -0 -4.6 0 3.8 0.96 0.12 0 1 -0 -4.2 0 4.2 0.92 0.08 0 1 -0 -4.6 0 4.2 0.96 0.08 0 1 -0 -5 0 3.8 1 0.12 0 1 -0 -4.6 0 3.8 0.96 0.12 0 1 -0 -5 0 4.2 1 0.08 0 1 -0 -5 0 3.8 1 0.12 0 1 -0 -4.6 0 4.2 0.96 0.08 0 1 -0 --5 0 4.6 0 0.04 0 1 -0 --4.6 0 4.2 0.04 0.08 0 1 -0 --5 0 4.2 0 0.08 0 1 -0 --4.6 0 4.6 0.04 0.04 0 1 -0 --4.6 0 4.2 0.04 0.08 0 1 -0 --5 0 4.6 0 0.04 0 1 -0 --4.6 0 4.6 0.04 0.04 0 1 -0 --4.2 0 4.2 0.08 0.08 0 1 -0 --4.6 0 4.2 0.04 0.08 0 1 -0 --4.2 0 4.6 0.08 0.04 0 1 -0 --4.2 0 4.2 0.08 0.08 0 1 -0 --4.6 0 4.6 0.04 0.04 0 1 -0 --4.2 0 4.6 0.08 0.04 0 1 -0 --3.8 0 4.2 0.12 0.08 0 1 -0 --4.2 0 4.2 0.08 0.08 0 1 -0 --3.8 0 4.6 0.12 0.04 0 1 -0 --3.8 0 4.2 0.12 0.08 0 1 -0 --4.2 0 4.6 0.08 0.04 0 1 -0 --3.8 0 4.6 0.12 0.04 0 1 -0 --3.4 0 4.2 0.16 0.08 0 1 -0 --3.8 0 4.2 0.12 0.08 0 1 -0 --3.4 0 4.6 0.16 0.04 0 1 -0 --3.4 0 4.2 0.16 0.08 0 1 -0 --3.8 0 4.6 0.12 0.04 0 1 -0 --3.4 0 4.6 0.16 0.04 0 1 -0 --3 0 4.2 0.2 0.08 0 1 -0 --3.4 0 4.2 0.16 0.08 0 1 -0 --3 0 4.6 0.2 0.04 0 1 -0 --3 0 4.2 0.2 0.08 0 1 -0 --3.4 0 4.6 0.16 0.04 0 1 -0 --3 0 4.6 0.2 0.04 0 1 -0 --2.6 0 4.2 0.24 0.08 0 1 -0 --3 0 4.2 0.2 0.08 0 1 -0 --2.6 0 4.6 0.24 0.04 0 1 -0 --2.6 0 4.2 0.24 0.08 0 1 -0 --3 0 4.6 0.2 0.04 0 1 -0 --2.6 0 4.6 0.24 0.04 0 1 -0 --2.2 0 4.2 0.28 0.08 0 1 -0 --2.6 0 4.2 0.24 0.08 0 1 -0 --2.2 0 4.6 0.28 0.04 0 1 -0 --2.2 0 4.2 0.28 0.08 0 1 -0 --2.6 0 4.6 0.24 0.04 0 1 -0 --2.2 0 4.6 0.28 0.04 0 1 -0 --1.8 0 4.2 0.32 0.08 0 1 -0 --2.2 0 4.2 0.28 0.08 0 1 -0 --1.8 0 4.6 0.32 0.04 0 1 -0 --1.8 0 4.2 0.32 0.08 0 1 -0 --2.2 0 4.6 0.28 0.04 0 1 -0 --1.8 0 4.6 0.32 0.04 0 1 -0 --1.4 0 4.2 0.36 0.08 0 1 -0 --1.8 0 4.2 0.32 0.08 0 1 -0 --1.4 0 4.6 0.36 0.04 0 1 -0 --1.4 0 4.2 0.36 0.08 0 1 -0 --1.8 0 4.6 0.32 0.04 0 1 -0 --1.4 0 4.6 0.36 0.04 0 1 -0 --1 0 4.2 0.4 0.08 0 1 -0 --1.4 0 4.2 0.36 0.08 0 1 -0 --1 0 4.6 0.4 0.04 0 1 -0 --1 0 4.2 0.4 0.08 0 1 -0 --1.4 0 4.6 0.36 0.04 0 1 -0 --1 0 4.6 0.4 0.04 0 1 -0 --0.6 0 4.2 0.44 0.08 0 1 -0 --1 0 4.2 0.4 0.08 0 1 -0 --0.6 0 4.6 0.44 0.04 0 1 -0 --0.6 0 4.2 0.44 0.08 0 1 -0 --1 0 4.6 0.4 0.04 0 1 -0 --0.6 0 4.6 0.44 0.04 0 1 -0 --0.2 0 4.2 0.48 0.08 0 1 -0 --0.6 0 4.2 0.44 0.08 0 1 -0 --0.2 0 4.6 0.48 0.04 0 1 -0 --0.2 0 4.2 0.48 0.08 0 1 -0 --0.6 0 4.6 0.44 0.04 0 1 -0 --0.2 0 4.6 0.48 0.04 0 1 -0 -0.2 0 4.2 0.52 0.08 0 1 -0 --0.2 0 4.2 0.48 0.08 0 1 -0 -0.2 0 4.6 0.52 0.04 0 1 -0 -0.2 0 4.2 0.52 0.08 0 1 -0 --0.2 0 4.6 0.48 0.04 0 1 -0 -0.2 0 4.6 0.52 0.04 0 1 -0 -0.6 0 4.2 0.56 0.08 0 1 -0 -0.2 0 4.2 0.52 0.08 0 1 -0 -0.6 0 4.6 0.56 0.04 0 1 -0 -0.6 0 4.2 0.56 0.08 0 1 -0 -0.2 0 4.6 0.52 0.04 0 1 -0 -0.6 0 4.6 0.56 0.04 0 1 -0 -1 0 4.2 0.6 0.08 0 1 -0 -0.6 0 4.2 0.56 0.08 0 1 -0 -1 0 4.6 0.6 0.04 0 1 -0 -1 0 4.2 0.6 0.08 0 1 -0 -0.6 0 4.6 0.56 0.04 0 1 -0 -1 0 4.6 0.6 0.04 0 1 -0 -1.4 0 4.2 0.64 0.08 0 1 -0 -1 0 4.2 0.6 0.08 0 1 -0 -1.4 0 4.6 0.64 0.04 0 1 -0 -1.4 0 4.2 0.64 0.08 0 1 -0 -1 0 4.6 0.6 0.04 0 1 -0 -1.4 0 4.6 0.64 0.04 0 1 -0 -1.8 0 4.2 0.68 0.08 0 1 -0 -1.4 0 4.2 0.64 0.08 0 1 -0 -1.8 0 4.6 0.68 0.04 0 1 -0 -1.8 0 4.2 0.68 0.08 0 1 -0 -1.4 0 4.6 0.64 0.04 0 1 -0 -1.8 0 4.6 0.68 0.04 0 1 -0 -2.2 0 4.2 0.72 0.08 0 1 -0 -1.8 0 4.2 0.68 0.08 0 1 -0 -2.2 0 4.6 0.72 0.04 0 1 -0 -2.2 0 4.2 0.72 0.08 0 1 -0 -1.8 0 4.6 0.68 0.04 0 1 -0 -2.2 0 4.6 0.72 0.04 0 1 -0 -2.6 0 4.2 0.76 0.08 0 1 -0 -2.2 0 4.2 0.72 0.08 0 1 -0 -2.6 0 4.6 0.76 0.04 0 1 -0 -2.6 0 4.2 0.76 0.08 0 1 -0 -2.2 0 4.6 0.72 0.04 0 1 -0 -2.6 0 4.6 0.76 0.04 0 1 -0 -3 0 4.2 0.8 0.08 0 1 -0 -2.6 0 4.2 0.76 0.08 0 1 -0 -3 0 4.6 0.8 0.04 0 1 -0 -3 0 4.2 0.8 0.08 0 1 -0 -2.6 0 4.6 0.76 0.04 0 1 -0 -3 0 4.6 0.8 0.04 0 1 -0 -3.4 0 4.2 0.84 0.08 0 1 -0 -3 0 4.2 0.8 0.08 0 1 -0 -3.4 0 4.6 0.84 0.04 0 1 -0 -3.4 0 4.2 0.84 0.08 0 1 -0 -3 0 4.6 0.8 0.04 0 1 -0 -3.4 0 4.6 0.84 0.04 0 1 -0 -3.8 0 4.2 0.88 0.08 0 1 -0 -3.4 0 4.2 0.84 0.08 0 1 -0 -3.8 0 4.6 0.88 0.04 0 1 -0 -3.8 0 4.2 0.88 0.08 0 1 -0 -3.4 0 4.6 0.84 0.04 0 1 -0 -3.8 0 4.6 0.88 0.04 0 1 -0 -4.2 0 4.2 0.92 0.08 0 1 -0 -3.8 0 4.2 0.88 0.08 0 1 -0 -4.2 0 4.6 0.92 0.04 0 1 -0 -4.2 0 4.2 0.92 0.08 0 1 -0 -3.8 0 4.6 0.88 0.04 0 1 -0 -4.2 0 4.6 0.92 0.04 0 1 -0 -4.6 0 4.2 0.96 0.08 0 1 -0 -4.2 0 4.2 0.92 0.08 0 1 -0 -4.6 0 4.6 0.96 0.04 0 1 -0 -4.6 0 4.2 0.96 0.08 0 1 -0 -4.2 0 4.6 0.92 0.04 0 1 -0 -4.6 0 4.6 0.96 0.04 0 1 -0 -5 0 4.2 1 0.08 0 1 -0 -4.6 0 4.2 0.96 0.08 0 1 -0 -5 0 4.6 1 0.04 0 1 -0 -5 0 4.2 1 0.08 0 1 -0 -4.6 0 4.6 0.96 0.04 0 1 -0 --5 0 5 0 0 0 1 -0 --4.6 0 4.6 0.04 0.04 0 1 -0 --5 0 4.6 0 0.04 0 1 -0 --4.6 0 5 0.04 0 0 1 -0 --4.6 0 4.6 0.04 0.04 0 1 -0 --5 0 5 0 0 0 1 -0 --4.6 0 5 0.04 0 0 1 -0 --4.2 0 4.6 0.08 0.04 0 1 -0 --4.6 0 4.6 0.04 0.04 0 1 -0 --4.2 0 5 0.08 0 0 1 -0 --4.2 0 4.6 0.08 0.04 0 1 -0 --4.6 0 5 0.04 0 0 1 -0 --4.2 0 5 0.08 0 0 1 -0 --3.8 0 4.6 0.12 0.04 0 1 -0 --4.2 0 4.6 0.08 0.04 0 1 -0 --3.8 0 5 0.12 0 0 1 -0 --3.8 0 4.6 0.12 0.04 0 1 -0 --4.2 0 5 0.08 0 0 1 -0 --3.8 0 5 0.12 0 0 1 -0 --3.4 0 4.6 0.16 0.04 0 1 -0 --3.8 0 4.6 0.12 0.04 0 1 -0 --3.4 0 5 0.16 0 0 1 -0 --3.4 0 4.6 0.16 0.04 0 1 -0 --3.8 0 5 0.12 0 0 1 -0 --3.4 0 5 0.16 0 0 1 -0 --3 0 4.6 0.2 0.04 0 1 -0 --3.4 0 4.6 0.16 0.04 0 1 -0 --3 0 5 0.2 0 0 1 -0 --3 0 4.6 0.2 0.04 0 1 -0 --3.4 0 5 0.16 0 0 1 -0 --3 0 5 0.2 0 0 1 -0 --2.6 0 4.6 0.24 0.04 0 1 -0 --3 0 4.6 0.2 0.04 0 1 -0 --2.6 0 5 0.24 0 0 1 -0 --2.6 0 4.6 0.24 0.04 0 1 -0 --3 0 5 0.2 0 0 1 -0 --2.6 0 5 0.24 0 0 1 -0 --2.2 0 4.6 0.28 0.04 0 1 -0 --2.6 0 4.6 0.24 0.04 0 1 -0 --2.2 0 5 0.28 0 0 1 -0 --2.2 0 4.6 0.28 0.04 0 1 -0 --2.6 0 5 0.24 0 0 1 -0 --2.2 0 5 0.28 0 0 1 -0 --1.8 0 4.6 0.32 0.04 0 1 -0 --2.2 0 4.6 0.28 0.04 0 1 -0 --1.8 0 5 0.32 0 0 1 -0 --1.8 0 4.6 0.32 0.04 0 1 -0 --2.2 0 5 0.28 0 0 1 -0 --1.8 0 5 0.32 0 0 1 -0 --1.4 0 4.6 0.36 0.04 0 1 -0 --1.8 0 4.6 0.32 0.04 0 1 -0 --1.4 0 5 0.36 0 0 1 -0 --1.4 0 4.6 0.36 0.04 0 1 -0 --1.8 0 5 0.32 0 0 1 -0 --1.4 0 5 0.36 0 0 1 -0 --1 0 4.6 0.4 0.04 0 1 -0 --1.4 0 4.6 0.36 0.04 0 1 -0 --1 0 5 0.4 0 0 1 -0 --1 0 4.6 0.4 0.04 0 1 -0 --1.4 0 5 0.36 0 0 1 -0 --1 0 5 0.4 0 0 1 -0 --0.6 0 4.6 0.44 0.04 0 1 -0 --1 0 4.6 0.4 0.04 0 1 -0 --0.6 0 5 0.44 0 0 1 -0 --0.6 0 4.6 0.44 0.04 0 1 -0 --1 0 5 0.4 0 0 1 -0 --0.6 0 5 0.44 0 0 1 -0 --0.2 0 4.6 0.48 0.04 0 1 -0 --0.6 0 4.6 0.44 0.04 0 1 -0 --0.2 0 5 0.48 0 0 1 -0 --0.2 0 4.6 0.48 0.04 0 1 -0 --0.6 0 5 0.44 0 0 1 -0 --0.2 0 5 0.48 0 0 1 -0 -0.2 0 4.6 0.52 0.04 0 1 -0 --0.2 0 4.6 0.48 0.04 0 1 -0 -0.2 0 5 0.52 0 0 1 -0 -0.2 0 4.6 0.52 0.04 0 1 -0 --0.2 0 5 0.48 0 0 1 -0 -0.2 0 5 0.52 0 0 1 -0 -0.6 0 4.6 0.56 0.04 0 1 -0 -0.2 0 4.6 0.52 0.04 0 1 -0 -0.6 0 5 0.56 0 0 1 -0 -0.6 0 4.6 0.56 0.04 0 1 -0 -0.2 0 5 0.52 0 0 1 -0 -0.6 0 5 0.56 0 0 1 -0 -1 0 4.6 0.6 0.04 0 1 -0 -0.6 0 4.6 0.56 0.04 0 1 -0 -1 0 5 0.6 0 0 1 -0 -1 0 4.6 0.6 0.04 0 1 -0 -0.6 0 5 0.56 0 0 1 -0 -1 0 5 0.6 0 0 1 -0 -1.4 0 4.6 0.64 0.04 0 1 -0 -1 0 4.6 0.6 0.04 0 1 -0 -1.4 0 5 0.64 0 0 1 -0 -1.4 0 4.6 0.64 0.04 0 1 -0 -1 0 5 0.6 0 0 1 -0 -1.4 0 5 0.64 0 0 1 -0 -1.8 0 4.6 0.68 0.04 0 1 -0 -1.4 0 4.6 0.64 0.04 0 1 -0 -1.8 0 5 0.68 0 0 1 -0 -1.8 0 4.6 0.68 0.04 0 1 -0 -1.4 0 5 0.64 0 0 1 -0 -1.8 0 5 0.68 0 0 1 -0 -2.2 0 4.6 0.72 0.04 0 1 -0 -1.8 0 4.6 0.68 0.04 0 1 -0 -2.2 0 5 0.72 0 0 1 -0 -2.2 0 4.6 0.72 0.04 0 1 -0 -1.8 0 5 0.68 0 0 1 -0 -2.2 0 5 0.72 0 0 1 -0 -2.6 0 4.6 0.76 0.04 0 1 -0 -2.2 0 4.6 0.72 0.04 0 1 -0 -2.6 0 5 0.76 0 0 1 -0 -2.6 0 4.6 0.76 0.04 0 1 -0 -2.2 0 5 0.72 0 0 1 -0 -2.6 0 5 0.76 0 0 1 -0 -3 0 4.6 0.8 0.04 0 1 -0 -2.6 0 4.6 0.76 0.04 0 1 -0 -3 0 5 0.8 0 0 1 -0 -3 0 4.6 0.8 0.04 0 1 -0 -2.6 0 5 0.76 0 0 1 -0 -3 0 5 0.8 0 0 1 -0 -3.4 0 4.6 0.84 0.04 0 1 -0 -3 0 4.6 0.8 0.04 0 1 -0 -3.4 0 5 0.84 0 0 1 -0 -3.4 0 4.6 0.84 0.04 0 1 -0 -3 0 5 0.8 0 0 1 -0 -3.4 0 5 0.84 0 0 1 -0 -3.8 0 4.6 0.88 0.04 0 1 -0 -3.4 0 4.6 0.84 0.04 0 1 -0 -3.8 0 5 0.88 0 0 1 -0 -3.8 0 4.6 0.88 0.04 0 1 -0 -3.4 0 5 0.84 0 0 1 -0 -3.8 0 5 0.88 0 0 1 -0 -4.2 0 4.6 0.92 0.04 0 1 -0 -3.8 0 4.6 0.88 0.04 0 1 -0 -4.2 0 5 0.92 0 0 1 -0 -4.2 0 4.6 0.92 0.04 0 1 -0 -3.8 0 5 0.88 0 0 1 -0 -4.2 0 5 0.92 0 0 1 -0 -4.6 0 4.6 0.96 0.04 0 1 -0 -4.2 0 4.6 0.92 0.04 0 1 -0 -4.6 0 5 0.96 0 0 1 -0 -4.6 0 4.6 0.96 0.04 0 1 -0 -4.2 0 5 0.92 0 0 1 -0 -4.6 0 5 0.96 0 0 1 -0 -5 0 4.6 1 0.04 0 1 -0 -4.6 0 4.6 0.96 0.04 0 1 -0 -5 0 5 1 0 0 1 -0 -5 0 4.6 1 0.04 0 1 -0 -4.6 0 5 0.96 0 0 1 -0 +-1.0 1.0 1.0 0.0 0.0 0.0 1.0 0.0 + 1.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 +-1.0 1.0 -1.0 0.0 1.0 0.0 1.0 0.0 +-1.0 1.0 -1.0 0.0 1.0 0.0 1.0 0.0 + 1.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 + 1.0 1.0 -1.0 1.0 1.0 0.0 1.0 0.0 From a7d40865e147cb26b6b8da67d529da6369c9a9d1 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Thu, 25 Apr 2024 10:35:28 +0200 Subject: [PATCH 18/19] fix: normalmapshaderclass dans le bon filtre --- enginecustom/enginecustom.vcxproj.filters | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/enginecustom/enginecustom.vcxproj.filters b/enginecustom/enginecustom.vcxproj.filters index 6319e5c..1fbf57e 100644 --- a/enginecustom/enginecustom.vcxproj.filters +++ b/enginecustom/enginecustom.vcxproj.filters @@ -157,7 +157,7 @@ Fichiers sources - Assets + Fichiers sources From 6db8cc7efc46cf6affe7e570955a866f5b5cd4e1 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Thu, 25 Apr 2024 10:37:45 +0200 Subject: [PATCH 19/19] style: GetGrounded() => IsGrounded() --- enginecustom/applicationclass.cpp | 2 +- enginecustom/object.cpp | 2 +- enginecustom/object.h | 2 +- enginecustom/physics.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index 105aac2..f56b360 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -789,7 +789,7 @@ bool ApplicationClass::Frame(InputClass* Input) { forceY = 40.0f; } - if (keyDown && !object->GetGrounded()) + if (keyDown && !object->IsGrounded()) { forceY = -40.0f; } diff --git a/enginecustom/object.cpp b/enginecustom/object.cpp index ea0f053..335e3bb 100644 --- a/enginecustom/object.cpp +++ b/enginecustom/object.cpp @@ -209,7 +209,7 @@ void Object::SetGrounded(bool isGrounded) m_isGrounded = isGrounded; } -bool Object::GetGrounded() const +bool Object::IsGrounded() const { return m_isGrounded; } diff --git a/enginecustom/object.h b/enginecustom/object.h index db82b29..4f939dd 100644 --- a/enginecustom/object.h +++ b/enginecustom/object.h @@ -35,7 +35,7 @@ public: void SetMass(float); float GetMass() const; void SetGrounded(bool); - bool GetGrounded() const; + bool IsGrounded() const; void UpdateWorldMatrix(); void UpdateSRMatrix(); diff --git a/enginecustom/physics.cpp b/enginecustom/physics.cpp index 47b41d7..36370b3 100644 --- a/enginecustom/physics.cpp +++ b/enginecustom/physics.cpp @@ -35,7 +35,7 @@ void Physics::ApplyGravity(Object* object, float dragValue, float frameTime) return; } - if (!object->GetGrounded()) // Verify if the object is grounded + if (!object->IsGrounded()) // Verify if the object is grounded { // Calculate the acceleration caused by gravity XMVECTOR gravityAcceleration = m_gravity / object->GetMass();