using Plots function integrate(f::Function, min::Real, max::Real, dx=0.00001) # Trapezoidal integration sum = 0 for i in min:dx:max-dx sum += f(i)+f(i+dx) end sum*dx/2 end function interpolate(ys::Array{<:Real}, range::Real) return function(t::Real) if t == range return last(ys) end float_idx = 1 + t/range * (length(ys) - 1) left_dist = decimal(float_idx) left = ys[Integer(floor(float_idx))] right = ys[Integer(floor(float_idx + 1))] left * (1-left_dist) + right * left_dist end end function decimal(a::Real) a - floor(a) end function a_0(f::Function, L::Real) integrate(f, -L, L)/(2L) end function a_n(f, L, n) 1/L*integrate(t -> f(t)*cos(n*pi*t/L), -L, L) end function b_n(f::Function, L::Real, n::Integer) 1/L*integrate(t -> f(t)*sin(n*pi*t/L), -L, L) end function as(f::Function, L::Real, max_n::Integer) [a_n(f, L, n) for n in [0, max_n]] end function bs(f::Function, L::Real, max_n::Integer) [b_n(f, L, n) for n in [0, max_n]] end function fourier_series(values) range = 1 f = interpolate(values, range) # Uhh... we're integrating from -L to L, so let g(t) = f(t + L) L = range / 2 g = t -> f(t+range/2) max_n = 400 c_a_0 = round(a_0(g, L); digits=4) c_a_n = [round(a_n(g, L, n); digits=4) for n in [1:max_n;]] c_b_n = [round(b_n(g, L, n); digits=4) for n in [1:max_n;]] return (c_a_0, c_a_n, c_b_n) end function fourier_series_at(t, a0_val, an_vals, bn_vals) sum = a0_val for n = [1:length(an_vals);] sum += an_vals[n]*cos(t*n) + bn_vals[n]*sin(t*n) end sum end function render_points(a0_val, an_vals, bn_vals) dt = 0.0001 [fourier_series_at(t, a0_val, an_vals, bn_vals) for t = [-pi:dt:pi-dt;]] end # Test heart #xs = [938,938,938,938,938,938,938,939,940,942,944,946,948,952,956,960,964,970,975,979,983,990,997,1006,1010,1016,1023,1026,1029,1034,1038,1045,1052,1060,1065,1073,1077,1080,1082,1087,1093,1098,1101,1103,1107,1109,1110,1111,1111,1111,1110,1109,1107,1104,1099,1095,1091,1087,1085,1076,1069,1065,1053,1043,1033,1027,1019,1015,1001,994,986,978,970,963,957,951,946,940,938,932,928,924,921,920,918,916,915,914,914,913,912,912,912,912,912,912,912,913,913,913,914,914,914,914,913,912,911,908,906,905,901,897,892,889,883,878,871,867,863,855,846,840,830,823,814,808,801,796,792,789,785,783,779,777,775,776,777,780,783,788,794,798,805,814,821,828,832,839,847,854,860,863,869,875,880,883,887,893,899,903,909,912,917,921,922,924,926,928,931,933,936,938,939,940,941,942,944,945,945,946,946,946,946,947,947,947,946,946,946,946,946,946,946,945,945,945,945,945,945,945,945,945,945,945,945,945,945,944,943,943] #xs = [299,299,299,299,299,299,298,297,295,291,287,283,279,273,268,263,258,252,247,242,239,233,227,220,217,214,211,209,207,206,205,203,203,205,207,211,215,217,220,226,234,241,246,249,258,267,271,278,288,298,308,317,325,337,348,357,366,374,379,392,401,406,421,432,440,448,455,458,472,480,488,498,509,517,525,533,542,552,557,568,579,589,596,598,603,607,608,610,610,611,611,611,611,611,611,610,609,605,603,601,599,596,591,588,585,583,577,571,566,563,555,547,537,531,522,516,509,504,500,491,482,476,467,460,449,439,427,418,408,397,383,372,355,342,330,318,307,296,287,275,265,260,252,244,238,234,231,228,224,222,221,221,221,222,223,224,227,230,233,235,237,238,241,242,243,244,247,250,252,254,257,260,263,265,267,270,273,274,275,277,278,278,279,280,281,282,284,285,286,288,289,290,291,292,292,293,293,294,295,296,297,297,297,298,298,298,298,298,297,297] # I love you #xs = [343,345,348,351,356,364,370,384,400,419,434,446,462,482,499,520,536,556,571,589,601,612,625,633,641,645,647,648,647,645,641,634,624,608,595,579,567,552,541,530,518,511,502,496,490,486,483,482,483,485,489,494,501,509,522,532,541,552,563,576,590,602,614,636,650,658,664,679,699,729,747,757,782,797,812,824,839,854,875,889,900,912,920,922,923,924,922,915,908,896,878,861,847,834,821,806,792,782,772,764,759,756,754,754,754,760,768,778,792,812,829,846,863,884,901,912,922,933,940,943,943,940,934,927,914,902,894,883,878,873,869,867,865,867,869,872,875,877,879,882,886,892,896,900,913,926,937,948,955,963,980,994,999,1002,1004,1006,1006,1005,1000,999,999,1000,1003,1010,1019,1026,1031,1041,1052,1057,1059,1061,1062,1062,1060,1059,1058,1061,1065,1073,1083,1096,1108,1116,1130,1143,1146,1146,1142,1134,1121,1111,1100,1095,1094,1097,1103,1110,1117,1131,1139,1146,1153,1163,1172,1180,1185,1196,1210,1221,1232,1243,1254,1264,1271,1275,1280,1285,1288,1290,1290,1290,1287,1281,1275,1268,1264,1260,1254,1249,1249,1253,1261,1269,1278,1302,1313,1330,1345,1352,1357,1359,1360,1358,1346,1331,1317,1305,1297,1274,1260,1251,1235,1228,1227,1226,1228,1235,1255,1272,1290,1312,1327,1347,1356,1376,1396,1406,1413,1415,1422,1422,1418,1410,1399,1387,1376,1368,1363,1360,1354,1354,1355,1357,1359,1364,1370,1374,1378,1381,1387,1395,1406,1417,1432,1451,1463,1472,1485,1492,1496,1497,1495,1487,1475,1466,1457,1452,1452,1453,1457,1490,1505,1516,1528,1544,1549,1549,1548,1544,1539,1525,1520,1522,1529,1553,1573,1589,1597,1594] #ys = [536,536,535,534,532,529,526,519,509,497,489,480,469,453,438,419,403,382,366,345,329,314,295,280,267,260,253,250,250,250,254,262,275,294,309,329,344,364,380,395,413,427,443,455,469,479,489,496,502,506,511,513,514,515,515,514,514,513,511,509,506,503,500,494,490,487,485,480,472,460,451,446,431,422,411,401,387,373,350,333,319,302,291,287,284,282,282,288,295,306,325,344,360,377,394,415,436,450,463,475,485,489,493,495,495,492,487,481,471,457,446,435,425,415,410,407,406,408,413,422,431,441,454,464,478,488,492,497,498,495,492,486,473,463,454,444,439,436,434,434,436,445,452,456,462,465,465,463,461,458,447,435,429,423,419,416,416,425,444,456,462,465,469,469,466,460,454,441,428,421,419,416,416,421,429,439,452,462,466,468,467,463,458,453,444,430,423,418,417,418,427,437,453,464,474,481,483,484,483,482,481,480,479,476,474,471,470,466,462,457,451,445,438,432,426,422,417,414,413,412,412,412,417,425,433,443,449,455,463,474,480,482,482,480,475,461,452,440,429,425,422,423,425,431,450,471,493,514,528,562,583,593,609,614,612,606,596,583,554,534,514,493,480,463,457,442,430,426,425,426,429,434,445,457,471,485,495,500,501,500,491,477,466,459,455,451,451,455,460,468,475,479,480,479,475,468,462,457,446,438,434,432,432,437,447,458,471,481,486,488,489,480,472,464,455,438,432,432,434,439,447,466,481,488,493,500,501,499,497,498] # I love you v2 (connected) #xs = [223,223,223,223,223,223,225,227,228,229,232,233,235,236,238,243,248,252,256,260,262,265,269,271,276,279,281,287,293,297,300,305,312,320,325,331,337,346,352,358,363,371,378,382,386,391,395,399,401,403,405,406,406,406,406,406,404,402,400,395,391,387,384,380,376,371,367,364,360,357,355,355,351,350,349,350,350,351,352,355,355,361,363,370,375,381,386,389,393,397,400,405,411,416,421,425,430,433,440,446,451,456,463,468,473,480,486,492,498,505,513,521,530,536,543,548,552,558,561,563,564,565,564,563,561,557,553,548,544,540,533,528,522,516,511,507,504,503,502,502,502,502,502,503,506,511,514,519,525,530,537,544,547,550,554,559,563,568,571,573,574,576,577,576,574,570,566,562,553,551,547,544,541,537,535,536,538,540,542,544,547,551,556,558,561,563,567,568,570,572,575,579,583,586,589,591,592,592,592,592,592,592,591,590,589,589,589,590,591,593,597,599,604,607,611,615,619,620,621,622,622,622,619,618,616,615,615,617,618,622,627,632,640,647,652,656,660,662,663,663,661,658,656,654,649,644,641,640,640,640,642,644,650,652,654,656,658,662,665,667,668,670,672,674,676,677,679,681,683,685,686,688,691,693,694,696,698,700,703,706,709,712,714,716,719,722,725,727,728,730,733,736,738,741,744,747,750,752,755,756,759,762,764,766,767,767,767,767,767,765,764,763,761,759,759,758,757,755,755,753,751,751,750,750,750,750,751,752,753,755,757,759,762,764,766,771,774,776,779,783,785,788,790,792,793,794,795,797,798,798,799,799,800,800,800,800,800,800,800,800,798,797,795,793,791,789,788,784,778,774,770,765,760,754,748,742,736,729,722,715,708,703,695,690,685,679,676,673,670,670,671,675,679,688,699,704,709,724,734,744,751,758,773,783,795,801,809,817,823,832,836,840,842,844,845,847,847,847,845,844,843,841,836,832,828,825,821,815,813,812,813,813,815,817,820,823,826,829,831,834,837,839,841,845,851,854,859,865,868,870,872,875,876,876,876,876,876,874,871,869,865,864,863,863,863,863,864,864,865,866,867,868,869,870,871,871,872,874,875,876,878,879,880,883,884,885,887,888,889,890,892,892,894,895,896,897,898,899,900,901,903,904,904,905,906,907,908,908,909,909,909,908,907,906,906,905,905,904,903,903,902,901,900,900,899,898,897,896,896,896,896,896,896,896,896,896,896,898,898,899,900,901,902,903,905,906,907,908,909,909,909,912,913,914,914,915,916,918,918,919,921,922,922,925,926,927,928,929,930,932,934,936,938,939,940,942,947,951,954,955,957,959,961,962,962,961,959,956,952,949,946,944,942,940,939,938,937,935,933,931,927,925,921,917,911,906,900,894,889,884,871,857,849,841,832,819,810,787,771,758,745,732,719,707,690,665,650,636,623,603,592,572,556,540,523,502,490,473,452,431,411,403,384,365,353,338,329,310,297,274,259,247,231,218,208,198,190,180,172,167,162,159,156,155,154,155,157,161,166,171,182,196,208,220,235,242] #ys = [316,316,316,316,316,316,315,315,314,314,314,314,314,314,314,313,313,313,313,314,314,314,314,314,314,314,314,314,313,312,311,309,306,303,301,297,293,285,278,271,264,255,246,239,231,221,213,205,198,193,187,181,179,177,175,174,175,178,179,187,193,199,206,215,224,233,241,248,256,265,272,273,285,292,296,298,301,303,306,309,309,312,312,314,314,314,314,314,313,312,312,311,310,309,309,309,309,308,307,306,305,305,302,301,298,295,291,286,281,276,270,260,250,243,232,224,215,203,194,189,184,181,180,179,180,185,191,197,206,218,232,242,251,263,273,279,285,289,293,297,299,301,301,301,300,298,295,292,288,284,280,275,273,271,269,268,267,266,267,267,269,271,274,284,290,300,304,308,314,314,314,312,310,306,300,296,291,289,286,283,282,281,287,290,294,297,301,302,302,303,302,301,297,294,289,286,283,280,280,280,280,280,284,291,297,304,309,312,313,314,312,311,306,301,297,292,287,286,284,282,282,283,287,292,296,299,301,306,308,310,310,308,304,300,296,291,284,279,276,273,272,273,274,276,283,292,298,300,303,306,309,310,313,313,313,314,314,314,314,313,313,313,313,312,312,311,311,311,310,310,310,309,309,309,309,308,308,308,307,307,306,305,304,304,302,300,298,297,297,295,294,291,290,288,286,285,284,283,283,282,281,280,280,280,280,280,280,281,285,287,289,291,294,296,297,298,300,302,304,307,308,310,312,313,314,315,317,318,318,319,319,319,319,319,318,315,313,311,309,306,304,301,298,296,295,294,293,291,291,290,289,288,288,287,287,287,287,287,287,287,289,291,293,296,299,302,303,311,320,324,329,335,343,351,356,362,370,377,384,390,397,401,404,407,409,411,412,411,408,404,401,396,391,382,374,371,368,359,354,350,346,342,332,326,317,313,309,303,300,295,293,292,291,292,293,295,298,303,308,313,317,320,325,328,330,331,331,329,327,323,314,312,309,307,306,305,305,305,306,310,313,317,319,322,322,322,321,318,315,310,306,300,296,295,295,295,295,296,299,302,309,313,318,320,324,324,325,325,326,326,327,327,327,327,327,327,327,327,327,326,326,326,325,325,325,324,324,324,323,323,322,321,319,318,317,316,315,313,311,310,308,306,305,304,303,302,300,300,299,299,299,299,301,303,303,305,306,307,308,309,310,311,312,312,313,314,315,316,317,318,319,319,320,322,322,323,323,325,325,326,327,328,328,329,329,330,330,331,331,331,331,331,332,332,332,332,332,332,332,332,332,332,332,332,333,333,333,333,333,333,333,333,333,333,333,334,334,333,333,332,331,329,327,325,322,320,318,317,317,318,319,320,322,324,328,331,335,341,347,352,358,363,370,374,378,381,385,389,391,393,398,402,404,407,409,412,415,422,427,430,432,435,437,440,443,449,452,455,456,459,460,463,463,463,463,462,462,462,461,461,461,460,459,458,457,456,455,454,453,449,446,443,439,435,431,428,423,416,409,403,398,392,385,379,373,368,362,358,354,350,343,335,330,325,321,319] # I love you v3 xs = [159,159,159,159,161,164,165,166,168,169,172,174,175,177,180,181,182,184,186,189,194,196,198,200,202,206,209,211,215,218,221,225,228,231,235,239,241,245,247,251,254,259,263,270,273,275,277,281,286,291,295,299,302,305,308,311,318,324,328,332,338,343,348,351,354,359,363,365,369,374,377,379,382,385,388,391,393,395,398,402,405,407,408,410,413,415,417,419,421,423,424,426,427,429,430,431,433,434,434,435,436,437,437,437,437,437,436,435,434,434,433,432,430,428,425,423,422,420,418,415,412,411,409,408,406,403,400,399,397,395,391,390,388,386,385,383,382,380,378,374,372,371,370,369,368,368,367,367,366,366,366,366,366,367,368,369,370,371,372,373,374,375,376,378,380,380,382,383,385,386,387,389,393,395,398,400,403,405,406,409,411,415,418,421,427,429,432,434,438,441,445,448,451,455,457,460,463,467,471,476,478,482,486,489,495,502,506,511,515,519,521,525,529,532,539,541,543,549,552,556,559,563,567,569,573,577,582,585,591,593,596,600,605,607,611,615,619,622,624,625,628,630,632,635,639,642,645,646,648,651,654,656,658,659,661,661,661,659,656,654,651,647,641,638,635,631,627,621,617,612,606,605,602,598,594,587,585,584,580,576,575,574,573,572,570,569,569,569,569,569,569,569,571,572,573,573,575,576,579,582,585,590,594,597,599,603,605,610,613,617,620,624,628,632,637,641,647,651,654,656,662,665,669,671,674,676,678,679,680,681,681,681,680,677,674,670,667,664,660,656,652,649,644,641,638,635,633,631,631,631,632,633,634,635,636,637,638,640,641,643,646,649,652,654,656,658,662,664,666,669,671,674,676,679,685,688,694,697,701,703,704,705,706,707,708,708,709,709,709,709,709,709,709,709,709,710,711,713,715,716,718,721,722,724,726,728,729,732,735,738,740,743,746,746,748,749,750,750,750,751,751,751,751,751,751,750,750,750,750,751,751,752,753,754,756,757,760,763,768,771,775,778,784,791,793,795,797,798,799,798,798,796,794,791,789,787,785,781,777,774,773,771,769,768,768,768,768,769,769,770,771,773,774,776,777,780,782,784,786,788,789,791,792,793,796,798,800,801,803,806,807,808,809,811,813,815,816,818,819,820,822,823,825,829,831,833,834,836,837,840,841,843,845,847,848,852,854,856,857,858,858,860,861,863,864,867,867,869,870,872,874,878,880,883,885,886,888,890,890,892,893,894,896,897,897,898,899,900,901,902,902,903,904,905,905,905,905,906,906,906,906,906,906,906,906,905,904,902,900,897,896,895,893,891,889,887,886,884,883,882,880,879,879,880,881,882,883,885,887,890,893,897,899,901,904,910,913,915,917,919,925,927,929,932,936,937,939,940,942,944,945,947,949,950,951,952,953,954,954,954,954,955,955,955,955,954,954,952,950,948,947,944,941,939,937,933,928,925,922,918,914,908,902,899,894,887,879,874,870,864,858,852,845,840,834,827,822,819,816,811,807,805,803,800,798,796,796,797,798,800,803,807,811,815,818,820,826,829,832,835,839,847,851,857,861,866,871,874,878,882,886,891,895,898,901,905,910,914,918,921,926,928,933,937,942,945,948,951,954,958,964,968,974,977,981,984,988,993,995,997,999,1001,1003,1005,1007,1008,1009,1009,1008,1008,1007,1004,1002,1000,997,995,990,986,982,978,973,968,966,963,959,957,955,954,954,956,957,960,962,963,966,968,970,972,973,976,977,979,980,982,984,986,988,990,994,997,1000,1003,1007,1012,1015,1019,1022,1027,1031,1033,1036,1040,1044,1046,1048,1049,1049,1049,1049,1049,1050,1049,1047,1045,1043,1041,1039,1038,1036,1036,1036,1037,1038,1039,1042,1045,1049,1051,1055,1058,1061,1062,1067,1072,1075,1077,1081,1083,1085,1086,1087,1088,1090,1091,1091,1093,1093,1093,1093,1093,1092,1089,1087,1086,1085,1082,1081,1080,1080,1080,1081,1081,1082,1083,1086,1088,1091,1093,1096,1099,1101,1104,1106,1109,1111,1113,1116,1118,1119,1121,1122,1125,1126,1129,1131,1133,1135,1136,1138,1140,1142,1144,1146,1147,1150,1152,1154,1156,1158,1160,1161,1162,1163,1165,1166,1167,1167,1168,1170,1170,1171,1171,1172,1174,1175,1175,1175,1177,1178,1179,1180,1181,1184,1185,1187,1188,1189,1189,1190,1191,1193,1194,1195,1195,1195,1195,1195,1195,1195,1195,1195,1195,1195,1194,1194,1193,1193,1193,1192,1192,1192,1192,1191,1189,1188,1187,1185,1185,1185,1184,1183,1182,1181,1181,1180,1180,1179,1179,1178,1178,1178,1178,1178,1178,1178,1178,1178,1178,1178,1178,1178,1178,1178,1177,1177,1177,1177,1177,1176,1176,1176,1175,1175,1174,1173,1171,1167,1165,1163,1161,1157,1154,1153,1152,1151,1149,1148,1148,1147,1147,1148,1148,1149,1151,1152,1154,1155,1157,1159,1162,1165,1167,1169,1172,1173,1177,1180,1184,1186,1188,1191,1193,1197,1199,1201,1205,1208,1211,1214,1215,1217,1218,1218,1219,1220,1220,1220,1220,1220,1219,1218,1217,1215,1211,1207,1201,1197,1193,1188,1184,1175,1169,1164,1159,1153,1140,1129,1120,1112,1100,1091,1083,1077,1065,1057,1042,1025,1012,1001,992,983,972,963,954,948,941,922,911,903,895,884,873,865,856,846,841,818,804,792,776,766,758,733,719,703,677,660,645,637,618,598,580,565,554,534,520,505,479,462,444,429,415,398,384,366,352,335,320,306,292,279,270,253,239,230,222,212,204,196,190,184,176,172,168,162,155,152,150,147,145,142,139,138,136,135,135,135,136,138,139,140,141,143,146,151,154,156,156,159,163,162] ys = [357,357,357,357,358,360,360,360,360,360,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,358,358,358,358,357,357,357,357,357,356,355,354,353,352,351,350,348,346,345,343,341,339,338,337,334,331,329,326,323,319,316,314,310,304,300,297,294,289,285,280,276,272,268,264,260,255,251,245,241,236,233,227,220,214,210,205,197,193,189,185,180,173,169,166,162,155,152,149,144,140,136,133,132,130,129,127,126,125,124,124,126,127,130,132,134,137,140,144,149,155,160,163,169,175,182,186,190,193,204,209,215,219,221,228,234,244,250,264,268,273,277,282,287,291,296,299,303,307,312,316,318,321,324,328,330,333,336,338,340,343,345,348,350,351,352,354,355,356,357,358,360,361,362,363,364,364,365,366,367,368,370,370,371,371,371,371,371,372,372,372,372,372,372,372,372,371,371,370,369,369,367,366,364,361,360,358,356,354,354,351,348,347,343,341,338,332,328,325,323,320,315,312,307,303,298,295,290,288,283,278,271,267,262,256,250,245,239,235,227,221,216,209,199,192,185,180,173,166,157,149,144,140,129,129,129,130,132,135,138,142,149,153,159,165,173,184,192,200,213,216,223,235,245,260,264,269,278,287,292,297,299,303,313,318,322,329,331,337,340,343,347,349,350,351,352,352,354,355,355,355,354,352,350,347,345,340,336,333,329,325,319,314,308,305,301,298,296,295,294,293,293,293,294,296,298,301,304,309,315,320,325,331,338,343,347,349,352,354,355,354,353,351,348,345,342,336,330,324,320,316,313,310,308,306,305,304,305,306,309,313,317,321,323,325,328,329,330,332,333,334,335,335,334,333,331,330,328,326,324,320,317,311,306,304,302,301,301,301,301,301,302,309,314,321,325,332,336,338,340,342,342,341,341,340,338,336,332,327,323,317,312,310,307,304,301,299,299,299,299,299,299,299,300,304,309,313,318,322,324,326,328,330,332,334,337,339,340,340,340,339,336,332,329,326,320,315,307,303,301,298,297,296,297,297,299,302,307,313,316,321,326,330,333,337,342,347,348,350,354,355,356,357,358,361,362,364,364,366,367,368,368,369,370,371,371,372,372,372,372,373,373,373,374,374,374,374,374,375,375,375,375,375,375,375,374,374,374,374,374,373,373,372,372,370,369,368,368,367,367,365,364,363,361,359,358,356,354,352,349,346,344,341,339,337,335,333,332,331,329,327,326,326,325,324,323,322,321,320,320,318,317,317,316,316,316,315,314,314,314,314,314,314,314,316,319,322,324,326,328,329,334,338,342,346,347,350,352,354,357,359,362,364,365,367,369,370,371,372,373,374,373,373,372,370,369,368,366,365,359,357,356,353,349,347,346,345,342,339,337,333,330,328,325,324,323,323,322,322,322,322,322,322,322,322,323,327,329,334,336,344,348,351,353,360,368,374,378,383,388,396,404,408,414,423,429,434,438,444,449,453,457,461,464,466,466,467,467,467,465,464,463,462,459,455,453,451,447,444,439,435,433,430,428,427,423,422,420,419,417,413,411,410,408,406,404,403,402,400,399,396,393,392,390,388,385,383,380,377,373,370,366,364,362,359,358,355,353,351,349,347,344,343,341,339,338,337,337,336,336,336,338,340,343,345,348,350,353,356,358,365,369,371,373,375,377,378,379,379,379,379,378,377,374,371,367,365,362,356,354,351,349,348,348,347,347,348,348,349,351,352,354,357,359,362,364,366,368,368,368,368,368,367,366,365,364,361,358,355,353,348,344,340,338,337,336,335,334,334,334,335,338,342,346,351,354,359,362,365,369,371,372,373,375,376,376,376,377,376,376,375,373,369,366,363,358,354,349,346,343,339,336,334,333,332,331,331,331,331,335,343,347,351,353,360,364,367,370,372,374,375,376,377,379,380,380,381,381,381,382,382,382,382,382,382,381,381,381,381,381,381,381,381,381,381,381,381,381,380,380,379,379,378,378,377,376,376,376,375,375,374,374,373,372,372,372,371,370,370,369,368,367,366,365,364,363,362,361,360,359,357,354,353,350,348,345,343,340,337,332,329,326,324,322,319,317,314,312,311,309,307,306,305,305,305,305,304,304,304,304,304,305,306,307,308,310,311,312,314,314,317,318,319,321,322,324,326,327,328,330,331,334,334,335,335,335,335,335,335,334,332,330,329,328,327,326,324,322,321,319,317,316,315,314,313,311,310,310,311,312,313,314,316,319,325,328,331,337,340,343,347,352,355,357,359,359,361,362,363,365,365,366,368,368,369,369,370,370,371,371,371,372,373,374,375,376,378,379,380,382,384,386,387,391,395,398,401,403,405,409,410,412,416,419,424,426,428,431,433,436,438,439,440,442,444,445,445,446,447,447,447,447,447,447,447,448,448,448,447,447,446,445,444,443,442,440,438,437,436,434,432,430,428,426,425,423,421,420,418,417,417,415,414,413,413,413,413,413,413,413,412,412,412,413,414,415,416,417,419,420,421,423,424,426,426,428,428,428,429,429,429,429,428,428,427,427,426,425,423,422,420,418,417,414,411,410,408,407,405,402,399,396,394,390,387,382,377,375,372,369,366,363,360,357,356,355,356,357,360,359] a0_x, an_x, bn_x = fourier_series(xs) a0_y, an_y, bn_y = fourier_series(ys) println("a0_x = ", a0_x) println("an_x = ", an_x) println("bn_x = ", bn_x) println("a0_y = ", a0_y) println("an_y = ", an_y) println("bn_y = ", bn_y) render_xs = render_points(a0_x, an_x, bn_x) render_ys = render_points(a0_y, an_y, bn_y) plt = plot() render_fx = interpolate(render_xs, 1) render_fy = interpolate(render_ys, 1) plot(render_fx, t -> 800-render_fy(t), 0, 1, leg=false) #= for a = [1:length(c_a_n);] print(c_a_n[a], "cos(", a, "t)+") end for a = [1:length(c_b_n);] print(c_b_n[a], "sin(", a, "t)+") end println(c_a_0) =#