#########################
####  Integration  ######
#########################
import matplotlib.pyplot as plt
import numpy as np

# vecteur acceleation suivant x et y et temps
acceleration_x=[-0.3924, 0.0, -0.0981, -0.0981, -0.0981, -0.1962, -0.1962, -0.1962, -0.0981, -0.0981, -0.0981, -0.0981, -0.0981, 0.2943, 0.1962, -0.0981, 0.0981, -0.0981, -0.0981, -0.0981, -0.0981, -0.2943, -0.1962, 0.0, 0.0981, 0.0, 0.0, 0.0981, 0.0981, 0.0, 0.0, -0.0981, -0.0981, -0.1962, -0.0981, -0.0981, -0.0981, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0981, 0.0, 0.0, 0.0981, 0.0, 0.0981, 0.1962, 0.0, 0.0981, 0.0981, 0.0, 0.0981, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0981, 0.0981, 0.0, 0.0, 0.0, 0.0981, 0.1962, 0.1962, 0.0981, 0.0, -0.0981, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0981, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0981, 0.0981, 0.0, 0.0, 0.0, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.1962, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.1962, 0.1962, 0.0981, 0.0981, 0.0981, 0.0981, 0.1962, 0.0981, 0.0981, 0.0, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0, 0.0, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0981, 0.0, 0.0, 0.0981, 0.0, 0.0, 0.0981, 0.1962, 0.1962, 0.0981, -0.0981, 0.0, 0.0981, 0.1962, 0.0981, 0.0981, 0.1962, 0.0981, 0.0, 0.0981, 0.2943, 0.2943, 0.2943, 0.1962, 0.1962, 0.1962, 0.2943, 0.1962, 0.0981, 0.0, 0.0981, 0.1962, 0.2943, 0.3924, 0.3924, 0.1962, 0.0981, 0.0981, 0.1962, 0.3924, 0.3924, 0.49050000000000005, 0.0981, 0.0981, 0.0981, 0.1962, 0.0981, 0.0981, 0.0981, 0.1962, 0.2943, 0.2943, 0.2943, 0.0981, 0.0, 0.0981, 0.1962, 0.1962, 0.0, 0.0, 0.0981, 0.1962, 0.1962, 0.0981, 0.0981, 0.1962, 0.1962, 0.2943, 0.0981, 0.2943, 0.1962, 0.1962, 0.2943, 0.1962, 0.2943, 0.1962, 0.2943, 0.0981, 0.1962, 0.1962, 0.1962, 0.1962, 0.2943, 0.2943, 0.2943, 0.2943, 0.1962, 0.2943, 0.2943, 0.2943, 0.1962, 0.2943, 0.1962, 0.2943, 0.1962, 0.2943, 0.1962, 0.1962, 0.1962, 0.1962, 0.1962, 0.0981, 0.1962, 0.1962, 0.1962, 0.1962, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.1962, 0.2943, 0.1962, 0.2943, 0.2943, 0.1962, 0.2943, 0.1962, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.3924, 0.2943, 0.1962, 0.1962, 0.2943, 0.2943, 0.1962, 0.2943, 0.1962, 0.2943, 0.0981, 0.2943, 0.2943, 0.2943, 0.2943, 0.1962, 0.2943, 0.2943, 0.2943, 0.2943, 0.1962, 0.1962, 0.2943, 0.2943, 0.1962, 0.1962, 0.1962, 0.2943, 0.2943, 0.1962, 0.1962, 0.3924, 0.2943, 0.0981, 0.2943, 0.1962, 0.1962, 0.3924, 0.0981, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.1962, 0.2943, 0.2943, 0.3924, 0.2943, 0.3924, 0.1962, 0.3924, 0.3924, 0.2943, 0.3924, 0.2943, 0.2943, 0.2943, 0.1962, 0.1962, 0.1962, 0.0981, 0.1962, 0.1962, 0.3924, 0.0981, 0.1962, 0.2943, 0.1962, 0.2943, 0.2943, 0.3924, 0.3924, 0.3924, 0.3924, 0.2943, 0.1962, 0.3924, 0.1962, 0.3924, 0.3924, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.3924, 0.1962, 0.2943, 0.1962, 0.2943, 0.1962, 0.3924, 0.2943, 0.3924, 0.3924, 0.3924, 0.2943, 0.2943, 0.2943, 0.1962, 0.2943, 0.2943, 0.3924, 0.3924, 0.2943, 0.3924, 0.3924, 0.3924, 0.3924, 0.49050000000000005, 0.1962, 0.2943, 0.2943, 0.3924, 0.2943, 0.2943, 0.3924, 0.2943, 0.3924, 0.3924, 0.3924, 0.3924, 0.2943, 0.3924, 0.3924, 0.2943, 0.49050000000000005, 0.3924, 0.49050000000000005, 0.3924, 0.3924, 0.49050000000000005, 0.2943, 0.3924, 0.2943, 0.2943, 0.3924, 0.3924, 0.2943, 0.3924, 0.3924, 0.3924, 0.49050000000000005, 0.3924, 0.1962, 0.1962, 0.1962, 0.1962, 0.0, 0.1962, 0.0981, 0.3924, 0.3924, 0.0981, 0.5886, 0.2943, 0.0, 0.2943, 0.2943, -0.0981, 0.0981, 0.3924, 0.3924, 0.2943, 0.2943, 0.1962, 0.0, 0.0981, 0.0981, 0.0981, 0.1962, 0.2943, 0.0981, 0.1962, 0.1962, 0.3924, 0.2943, 0.2943, 0.1962, 0.1962, 0.1962, 0.1962, 0.1962, 0.49050000000000005, 0.49050000000000005, 0.2943, 0.49050000000000005, 0.49050000000000005, 0.3924, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.3924, 0.1962, 0.2943, 0.1962, 0.0981, 0.0981, 0.1962, 0.3924]
acceleration_y=[0.2943, -0.0981, 0.0981, 0.0981, 0.0981, 0.1962, 0.1962, 0.0981, 0.1962, 0.2943, 0.1962, 0.2943, 0.2943, 0.0, 0.0981, 0.0981, 0.0, 0.2943, 0.2943, 0.1962, 0.0981, 0.1962, 0.1962, 0.0981, 0.0981, 0.1962, 0.1962, 0.1962, 0.1962, 0.1962, 0.1962, 0.1962, 0.1962, 0.1962, 0.1962, 0.2943, 0.2943, 0.1962, 0.1962, 0.1962, 0.1962, 0.2943, 0.1962, 0.1962, 0.2943, 0.1962, 0.2943, 0.1962, 0.1962, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.1962, 0.2943, 0.2943, 0.2943, 0.3924, 0.3924, 0.2943, 0.1962, 0.1962, 0.2943, 0.3924, 0.3924, 0.2943, 0.1962, 0.2943, 0.49050000000000005, 0.49050000000000005, 0.49050000000000005, 0.3924, 0.3924, 0.3924, 0.3924, 0.3924, 0.3924, 0.3924, 0.3924, 0.3924, 0.3924, 0.3924, 0.3924, 0.3924, 0.2943, 0.2943, 0.3924, 0.2943, 0.2943, 0.3924, 0.2943, 0.2943, 0.2943, 0.3924, 0.3924, 0.3924, 0.2943, 0.2943, 0.3924, 0.3924, 0.3924, 0.2943, 0.2943, 0.2943, 0.3924, 0.3924, 0.3924, 0.2943, 0.3924, 0.3924, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.1962, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.3924, 0.2943, 0.1962, 0.1962, 0.2943, 0.3924, 0.2943, 0.2943, 0.1962, 0.1962, 0.1962, 0.2943, 0.2943, 0.2943, 0.2943, 0.1962, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.3924, 0.3924, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.2943, 0.3924, 0.3924, 0.1962, 0.1962, 0.2943, 0.3924, 0.49050000000000005, 0.49050000000000005, 0.3924, 0.2943, 0.3924, 0.49050000000000005, 0.49050000000000005, 0.5886, 0.6867000000000001, 0.6867000000000001, 0.6867000000000001, 0.6867000000000001, 0.7848, 0.8829, 1.0791000000000002, 1.0791000000000002, 1.0791000000000002, 1.0791000000000002, 1.3734000000000002, 1.4715, 1.4715, 1.3734000000000002, 1.4715, 1.4715, 1.5696, 1.6677000000000002, 1.6677000000000002, 1.7658, 1.8639000000000001, 1.7658, 1.4715, 1.3734000000000002, 1.8639000000000001, 1.7658, 1.5696, 1.4715, 1.5696, 1.4715, 1.4715, 1.3734000000000002, 1.3734000000000002, 1.1772, 1.1772, 1.1772, 1.2753, 1.1772, 0.9810000000000001, 1.1772, 1.2753, 1.2753, 1.0791000000000002, 1.0791000000000002, 1.0791000000000002, 1.1772, 1.1772, 1.2753, 1.3734000000000002, 1.2753, 1.3734000000000002, 1.2753, 1.3734000000000002, 1.3734000000000002, 1.2753, 1.2753, 1.2753, 1.3734000000000002, 1.1772, 1.2753, 1.2753, 1.1772, 1.1772, 1.2753, 1.2753, 1.1772, 1.1772, 1.2753, 1.3734000000000002, 1.2753, 1.2753, 1.1772, 1.2753, 1.2753, 1.3734000000000002, 1.1772, 1.3734000000000002, 1.1772, 1.1772, 1.2753, 1.2753, 1.2753, 1.2753, 1.3734000000000002, 1.2753, 1.2753, 1.2753, 1.2753, 1.1772, 1.2753, 1.2753, 1.1772, 1.2753, 1.2753, 1.2753, 1.2753, 1.2753, 1.1772, 1.2753, 1.2753, 1.1772, 1.2753, 1.1772, 1.2753, 1.1772, 1.2753, 1.1772, 1.2753, 1.2753, 1.1772, 1.2753, 1.2753, 1.2753, 1.1772, 1.3734000000000002, 1.2753, 1.1772, 1.2753, 1.1772, 1.3734000000000002, 1.1772, 1.1772, 1.2753, 1.2753, 1.2753, 1.1772, 1.1772, 1.2753, 1.0791000000000002, 1.2753, 1.2753, 1.1772, 1.1772, 1.3734000000000002, 1.2753, 1.2753, 1.1772, 1.2753, 1.2753, 1.2753, 1.1772, 1.3734000000000002, 1.2753, 1.1772, 1.1772, 1.2753, 1.0791000000000002, 1.3734000000000002, 1.1772, 1.2753, 1.2753, 1.1772, 1.1772, 1.2753, 1.2753, 1.1772, 1.2753, 1.1772, 1.1772, 1.0791000000000002, 1.2753, 1.0791000000000002, 1.1772, 1.2753, 0.9810000000000001, 1.1772, 1.1772, 1.0791000000000002, 1.1772, 1.2753, 1.0791000000000002, 1.1772, 1.1772, 1.0791000000000002, 0.9810000000000001, 1.2753, 0.9810000000000001, 0.8829, 1.1772, 0.9810000000000001, 0.9810000000000001, 0.9810000000000001, 0.9810000000000001, 0.9810000000000001, 0.9810000000000001, 0.9810000000000001, 1.1772, 0.9810000000000001, 1.0791000000000002, 0.9810000000000001, 0.8829, 0.9810000000000001, 0.9810000000000001, 0.9810000000000001, 0.9810000000000001, 0.8829, 0.7848, 0.9810000000000001, 0.8829, 0.9810000000000001, 0.8829, 0.8829, 0.8829, 0.9810000000000001, 0.7848, 0.8829, 0.8829, 0.7848, 0.8829, 0.7848, 0.9810000000000001, 0.7848, 0.7848, 0.8829, 0.7848, 0.7848, 0.7848, 0.8829, 0.7848, 0.9810000000000001, 0.6867000000000001, 0.9810000000000001, 0.7848, 0.8829, 0.6867000000000001, 0.7848, 0.8829, 0.6867000000000001, 0.8829, 0.7848, 0.6867000000000001, 0.7848, 0.7848, 0.8829, 0.7848, 0.7848, 0.8829, 0.6867000000000001, 0.6867000000000001, 0.5886, 0.6867000000000001, 0.5886, 0.3924, 0.49050000000000005, 0.2943, 0.3924, 0.3924, 0.3924, 0.1962, 0.2943, 0.1962, 0.1962, 0.1962, 0.0981, 0.0981, 0.1962, 0.1962, 0.0981, 0.0, 0.0981, -0.2943, 0.0, -0.1962, -0.2943, 0.0, -0.49050000000000005, -0.3924, -0.49050000000000005, -0.9810000000000001, -0.7848, -0.5886, -0.8829, -0.9810000000000001, -1.0791000000000002, -1.0791000000000002, -1.1772, -1.2753, -1.3734000000000002, -1.4715, -1.4715, -1.4715, -1.5696, -1.6677000000000002, -1.2753, -1.0791000000000002, -0.8829, -0.5886, -0.0981, 0.0, 0.1962, 0.1962, 0.1962, 0.2943, 0.2943, 0.0, 0.0, 0.2943, 0.0981, 0.1962, 0.49050000000000005, 0.49050000000000005, 0.3924, 0.3924, 0.49050000000000005, 0.5886, 0.5886, 0.6867000000000001, 0.7848, 0.6867000000000001, 0.6867000000000001, 0.7848, 0.6867000000000001, 0.5886]
temps=[0.002, 0.052, 0.102, 0.152, 0.203, 0.253, 0.302, 0.352, 0.403, 0.453, 0.503, 0.553, 0.603, 0.654, 0.704, 0.754, 0.804, 0.854, 0.905, 0.955, 1.004, 1.054, 1.105, 1.155, 1.205, 1.255, 1.305, 1.356, 1.406, 1.456, 1.506, 1.557, 1.607, 1.656, 1.706, 1.756, 1.807, 1.857, 1.907, 1.958, 2.008, 2.058, 2.108, 2.158, 2.208, 2.259, 2.309, 2.359, 2.409, 2.46, 2.51, 2.559, 2.609, 2.659, 2.72, 2.813, 2.833, 2.852, 2.872, 2.892, 2.913, 2.933, 2.953, 2.973, 2.993, 3.014, 3.034, 3.053, 3.073, 3.094, 3.114, 3.134, 3.154, 3.174, 3.195, 3.215, 3.235, 3.255, 3.276, 3.296, 3.316, 3.336, 3.356, 3.377, 3.397, 3.416, 3.436, 3.457, 3.476, 3.496, 3.516, 3.537, 3.556, 3.576, 3.596, 3.617, 3.637, 3.657, 3.677, 3.698, 3.718, 3.737, 3.757, 3.778, 3.798, 3.818, 3.838, 3.858, 3.879, 3.899, 3.919, 3.939, 3.959, 3.98, 4.0, 4.019, 4.039, 4.059, 4.08, 4.1, 4.12, 4.14, 4.161, 4.181, 4.201, 4.221, 4.242, 4.262, 4.282, 4.302, 4.322, 4.342, 4.362, 4.382, 4.402, 4.422, 4.443, 4.463, 4.482, 4.502, 4.523, 4.543, 4.563, 4.583, 4.604, 4.624, 4.644, 4.665, 4.685, 4.705, 4.726, 4.746, 4.765, 4.785, 4.806, 4.826, 4.845, 4.865, 4.886, 4.906, 4.926, 4.946, 4.967, 4.986, 5.006, 5.026, 5.047, 5.066, 5.086, 5.107, 5.127, 5.147, 5.167, 5.188, 5.208, 5.228, 5.248, 5.268, 5.289, 5.309, 5.329, 5.349, 5.37, 5.39, 5.41, 5.43, 5.45, 5.471, 5.491, 5.511, 5.531, 5.551, 5.572, 5.592, 5.611, 5.631, 5.651, 5.672, 5.692, 5.711, 5.731, 5.751, 5.772, 5.792, 5.811, 5.831, 5.851, 5.872, 5.892, 5.912, 5.932, 5.952, 5.973, 5.993, 6.012, 6.032, 6.053, 6.073, 6.093, 6.113, 6.133, 6.154, 6.174, 6.194, 6.214, 6.235, 6.255, 6.275, 6.295, 6.316, 6.336, 6.355, 6.375, 6.395, 6.416, 6.436, 6.455, 6.632, 6.682, 6.733, 6.783, 6.833, 6.883, 6.934, 6.984, 7.033, 7.083, 7.134, 7.184, 7.233, 7.284, 7.334, 7.383, 7.433, 7.483, 7.534, 7.583, 7.633, 7.684, 7.733, 7.783, 7.834, 7.884, 7.934, 7.984, 8.034, 8.085, 8.135, 8.184, 8.234, 8.285, 8.335, 8.385, 8.435, 8.485, 8.536, 8.586, 8.636, 8.686, 8.737, 8.786, 8.836, 8.886, 8.938, 8.987, 9.038, 9.088, 9.137, 9.187, 9.238, 9.288, 9.337, 9.387, 9.437, 9.488, 9.538, 9.587, 9.637, 9.688, 9.738, 9.788, 9.838, 9.888, 9.939, 9.989, 10.038, 10.088, 10.138, 10.189, 10.239, 10.289, 10.339, 10.39, 10.44, 10.489, 10.539, 10.59, 10.639, 10.689, 10.739, 10.79, 10.839, 10.89, 10.94, 10.99, 11.04, 11.091, 11.141, 11.191, 11.241, 11.292, 11.342, 11.391, 11.441, 11.491, 11.542, 11.592, 11.641, 11.691, 11.741, 11.792, 11.842, 11.891, 11.941, 11.991, 12.042, 12.092, 12.141, 12.191, 12.241, 12.292, 12.342, 12.392, 12.442, 12.493, 12.543, 12.593, 12.643, 12.693, 12.744, 12.794, 12.844, 12.894, 12.944, 12.994, 13.045, 13.095, 13.146, 13.196, 13.246, 13.296, 13.347, 13.397, 13.446, 13.496, 13.547, 13.596, 13.646, 13.697, 13.747, 13.796, 13.846, 13.897, 13.946, 13.996, 14.046, 14.097, 14.147, 14.197, 14.247, 14.298, 14.348, 14.397, 14.447, 14.497, 14.548, 14.598, 14.647, 14.697, 14.748, 14.798, 14.848, 14.898, 14.948, 14.998, 15.049, 15.098, 15.148, 15.198, 15.249, 15.299, 15.348, 15.398, 15.448, 15.499, 15.549, 15.598, 15.648, 15.698, 15.749, 15.798, 15.849, 15.948, 15.999, 16.049, 16.099, 16.149, 16.199, 16.25, 16.3, 16.35, 16.4, 16.451, 16.501, 16.551, 16.601, 16.651, 16.701, 16.752, 16.802, 16.852, 16.902, 16.953, 17.003, 17.052, 17.102, 17.153, 17.203, 17.252, 17.302, 17.353, 17.403, 17.452, 17.502, 17.553, 17.603, 17.653, 17.703, 17.753, 17.804, 17.854, 17.904, 17.954, 18.004, 18.055, 18.105, 18.155, 18.205, 18.255, 18.306, 18.356, 18.405, 18.455, 18.506, 18.556, 18.606, 18.656, 18.707, 18.756, 18.806, 18.857, 18.907, 18.957, 19.006, 19.057, 19.106, 19.156, 19.207, 19.256, 19.306, 19.356, 19.407, 19.457, 19.507, 19.558, 19.608, 19.658, 19.708, 19.758, 19.809, 19.859, 19.958, 20.009]

# nombre de points de mesure
n=len(temps)

# affichage de l'accélération au cours du temps
plt.clf()
plt.plot(temps,acceleration_x)
plt.ylabel('acceleration en m.s^-2')
plt.show()

plt.clf()
plt.plot(temps,acceleration_y)
plt.ylabel('acceleration sur y en m.s^-2')
plt.show()

# Q1 calcul de l'intégrale méthode des rectangles
vitesse_rect_x=np.zeros(n)
for i in range (1,n):
    vitesse_rect_x[i] = vitesse_rect_x[i-1] + acceleration_x[i-1]*(temps[i]-temps[i-1])

plt.clf()
plt.plot(temps,vitesse_rect_x)
plt.ylabel('vitesse rect en m.s^-1')
plt.show()

# Q2 calcul de l'intégrale méthode des trapèzes
vitesse_trap_x=np.zeros(n)

for i in range (1,n):
    vitesse_trap_x[i] = vitesse_rect_x[i-1] + (acceleration_x[i-1] + acceleration_x[i])*(temps[i]-temps[i-1])/2

# Tracé
plt.clf()
plt.plot(temps,vitesse_trap_x)
plt.ylabel('vitesse trap en m.s^-1')
plt.show()

# Q3 calcul de la position

position_x=np.zeros(n)   

for i in range (1,n):
    position_x[i] = position_x[i-1] + vitesse_rect_x[i-1]*(temps[i]-temps[i-1])
    
plt.clf()
plt.plot(temps,position_x)
plt.ylabel('position_x en m')
plt.show()

# Q4 position y et tracé de la trajectoire

position_y=np.zeros(n)   

vitesse_trap_y=np.zeros(n)

for i in range (1,n):
    vitesse_trap_y[i] = vitesse_trap_y[i-1] + (acceleration_y[i-1] + acceleration_y[i])*(temps[i]-temps[i-1])/2

for i in range (1,n):
    position_y[i] = position_y[i-1] + vitesse_trap_y[i-1]*(temps[i]-temps[i-1])

plt.clf()
plt.plot(temps,position_y)
plt.ylabel('position_y en m')
plt.show()

plt.clf()
plt.plot(position_y, position_x)
plt.title('trajectoire du tramway')
plt.show()

# Q5 réponse à la problématique

# Distance parcourue lors de l'essai:
print('distance parcourue :',  np.sqrt(position_y[-1]**2 + position_x[-1]**2))
# 142 m

# Vitesse maximale
vitesses=[ np.sqrt(vitesse_trap_y[i]**2 + vitesse_trap_x[i]**2) for i in range(n)]
vmax= np.max(vitesses)
# à passer en km/h
print('vitesse maximale :', vmax*3.6)