问题
请使用C++11标准实现二维坐标转换公式:
有两套笛卡尔坐标系:XOY
和X'O'Y'
,X'O'Y'
相对于XOY
坐标系进行了平移(x_shift, y_shift)
和旋转(angle,弧度)
变换,一个点在XOY
坐标系中的坐标为:(x, y)
,计算该点在X'O'Y'
坐标系中的坐标:(x_prime, y_prime)
。
要求
1.使用C++标准库(STL库)算法;
2.使用C++11标准的Lambda表达式;
3.使用C++11标准库中的随机数生成器生成1000个[-100, 100]内的均匀随机数坐标进行测试;
4.使用C++11标准库中的计时方法计算坐标转换函数所花费的时间。
公式
公式推导就不说了(见这篇博客),如下所示:
x = x_prime * cos(angle) - y_prime * sin(angle) + x_shift
y = y_prime * cos(angle) + x_prime * sin(angle) + y_shift
x_prime = (x - x_shift) * cos(angle) + (y - y_shift) * sin(angle)
y_prime = (y - y_shift) * cos(angle) - (x - x_shift) * sin(angle)
代码
// Author: David Hopper
// E-mail: [email protected]
#include <algorithm>
#include <chrono>
#include <cmath>
#include <fstream>
#include <iostream>
#include <random>
struct Point {
explicit Point() : x(0.0), y(0.0) {}
explicit Point(double x_i, double y_i) : x(x_i), y(y_i) {}
double x;
double y;
};
// 2D coordinate transform
void CoordinateTransform2D(std::vector<Point>& points, double x_shift,
double y_shift, double angle);
int main(int argc, char** argv) {
double x_shift, y_shift, angle;
bool initialized = true;
// Parse parameters.
if (argc > 3) {
try {
x_shift = std::stod(argv[1]);
y_shift = std::stod(argv[2]);
angle = std::stod(argv[3]);
} catch (...) {
initialized = false;
}
} else {
initialized = false;
}
if (!initialized) {
std::cout << "Usage: \n"
<< "\t" << argv[0]
<< " x_shift y_shit angle(rad) result_file_name\n"
<< "Example: \n"
<< "\t" << argv[0] << " 1 1 0.785 test.txt" << std::endl;
std::cout
<< "The default transform parameters: (1.0, 1.0, PI/4.0) are used. "
<< std::endl;
x_shift = 1.0;
y_shift = 1.0;
angle = M_PI / 4.0;
}
std::string file_name;
if (argc > 4) {
file_name = argv[4];
}
if (file_name.empty()) {
file_name = "test.txt";
}
std::ofstream fout(file_name);
if (!fout.is_open()) {
std::cerr << "Cannot open the file: " << file_name << " to write results. "
<< std::endl;
return 1;
}
constexpr int kSize = 1000;
std::vector<Point> points(kSize);
std::random_device rd;
std::mt19937 gen(rd());
constexpr double kBound = 100.0;
std::uniform_real_distribution<double> dis(-kBound, kBound);
auto rand_num([&]() mutable {
Point point(dis(gen), dis(gen));
return point;
});
std::generate(std::begin(points), std::end(points), rand_num);
// Add a special point (0, 0) to check the correctness of the result.
points.emplace_back(0.0, 0.0);
fout << "Points before transformation: " << std::endl;
for (const auto& point : points) {
fout << "(" << point.x << ", " << point.y << "), ";
}
fout << std::endl;
auto start_time = std::chrono::steady_clock::now();
CoordinateTransform2D(points, x_shift, y_shift, angle);
auto end_time = std::chrono::steady_clock::now();
fout << "Elapsed time in milliseconds: "
<< std::chrono::duration_cast<std::chrono::microseconds>(end_time -
start_time)
.count()
<< " µs" << std::endl;
fout << "Points after transformation: " << std::endl;
for (const auto& point : points) {
fout << "(" << point.x << ", " << point.y << "), ";
}
fout << std::endl;
fout.close();
// Use the following line to avoid the disappearance of the command line
// window when debugging in VSCode.
// std::cin.get();
return 0;
}
// 2D coordinate transform
// Original: XOY
// Transformed: X'O'Y':
// Translation: (x_shift, y_shift)
// Rotation: angle (rad)
// A coordinate represented in XOY: (x, y)
// A coordinate represented in X'O'Y': (x_prime, y_prime)
// Transformation formula:
// x = x_prime * cos(angle) - y_prime * sin(angle) + x_shift
// y = y_prime * cos(angle) + x_prime * sin(angle) + y_shift
// x_prime = (x - x_shift) * cos(angle) + (y - y_shift) * sin(angle)
// y_prime = (y - y_shift) * cos(angle) - (x - x_shift) * sin(angle)
void CoordinateTransform2D(std::vector<Point>& points, double x_shift,
double y_shift, double angle) {
std::transform(
std::begin(points), std::end(points), std::begin(points),
[=](const Point& point) {
double sin_val = std::sin(angle);
double cos_val = std::cos(angle);
Point trans_point(
(point.x - x_shift) * cos_val + (point.y - y_shift) * sin_val,
(point.y - y_shift) * cos_val - (point.x - x_shift) * sin_val);
return trans_point;
});
}
编译指令
g++ -g -Wall -std=c++11 *.cpp -o test
结果
执行如下指令:
./test 2.5 3.5 0.3476 result.txt
在我机器上运行的结果如下:
Points before transformation
: (-77.5781, -87.3832),
(-83.8756, 61.0616),
(-84.294, -66.2067),
(79.6666, -50.0785),
(51.431, -28.4307),
(28.015, -71.6604),
(-5.37682, -39.0528),
(41.22, -8.97904),
(23.5979, -0.766472),
(35.9552, 3.61348),
(-17.6709, -63.0485),
(-68.5905, 4.51262),
(-92.8113, -83.9421),
(12.4378, 64.148),
(96.0308, -8.80373),
(39.6931, -28.4047),
(68.6329, 3.90714),
(-51.5738, -59.8949),
(63.0394, 24.2507),
(73.0724, -16.5424),
(-71.7909, 34.4098),
(-68.4305, 83.0725),
(-29.6809, 20.3638),
(-42.6257, -11.7805),
(-37.8868, 87.9958),
(-39.1441, 22.0786),
(-66.9905, -99.1343),
(11.394, 11.3881),
(-87.4088, 63.9272),
(93.9925, 70.4119),
(31.8355, 69.0841),
(-31.8731, -14.2943),
(57.5755, -47.0277),
(23.22, -99.6089),
(5.62697, -56.566),
(-56.8397, 13.7043),
(86.8864, 15.4661),
(5.47267, -5.41087),
(89.8262, -3.27915),
(-67.9456, 83.7751),
(97.0269, -72.6176),
(-62.165, 33.209),
(-23.4851, 47.6277),
(-22.5981, 38.6406),
(33.6895, 47.2239),
(-45.787, -20.7522),
(-45.8599, 85.4983),
(-87.3818, -89.8228),
(-82.1598, 87.1015),
(61.2795, -79.3586),
(-81.7094, -68.8969),
(94.1826, 35.8195),
(85.9987, -64.7438),
(5.94861, 47.0071),
(8.991, -48.4177),
(71.3585, 54.5151),
(-53.2155, 24.6063),
(-24.9944, 25.2277),
(-64.247, -4.00024),
(-38.7513, 27.5486),
(79.6492, -38.3925),
(-47.9822, -58.4295),
(-6.54801, 8.18575),
(92.4573, -55.9509),
(-44.6852, -71.8078),
(-86.8836, -99.3402),
(-60.4751, -18.7272),
(72.8438, -69.4679),
(24.2197, 27.2442),
(45.3163, 24.8003),
(-65.9832, -7.75722),
(69.8527, 80.8503),
(64.5131, 68.5267),
(-25.6696, -82.3117),
(8.82541, -94.0497),
(32.8733, 8.85101),
(32.6841, 34.6735),
(76.7519, -10.8524),
(31.7331, -14.6872),
(-83.6959, 58.1023),
(-67.4745, 18.6664),
(82.4146, -65.6839),
(88.5779, -53.3474),
(-31.9977, 73.2969),
(98.2983, 58.8218),
(83.7289, -17.6113),
(20.0972, -76.0503),
(97.4192, 11.9273),
(-92.438, 19.1106),
(-0.700133, 35.6394),
(68.8822, -29.9761),
(-62.683, 22.4781),
(-99.5006, 16.6045),
(19.446, 81.8101),
(17.9358, -92.64),
(45.1965, 43.3707),
(-93.2082, 59.4847),
(-58.4242, -37.5873),
(43.0549, -28.3448),
(-93.3692, -51.5951),
(-53.614, 24.4164),
(24.2341, 92.84),
(37.499, 19.2326),
(-22.4033, 45.0909),
(20.307, -0.29493),
(-52.0971, -53.3076),
(58.8245, -53.8125),
(95.2489, -78.3257),
(-41.0256, 55.2024),
(-14.4644, 34.508),
(25.7844, 75.6408),
(-71.3978, -59.1554),
(-5.71356, 20.0457),
(-65.6621, 31.3185),
(-55.3855, -37.0243),
(-87.4738, 55.0381),
(0.772477, -81.4926),
(3.82026, 54.003),
(-88.6321, -26.3469),
(-60.9882, -57.8289),
(15.0225, -42.4481),
(42.462, -71.8801),
(71.5321, -11.6107),
(-64.0469, -76.19),
(72.8118, 76.4698),
(-87.7303, -10.6825),
(18.4812, 24.6976),
(-97.5296, 31.9099),
(31.0148, 0.0796089),
(17.1559, -42.7295),
(85.094, 89.6993),
(44.8592, 6.24716),
(50.6028, 6.19735),
(-35.8976, -64.4989),
(-21.2344, 20.1233),
(44.4093, 47.0952),
(84.7519, 23.0534),
(15.5612, -54.4332),
(68.6918, -11.5925),
(-97.7517, 27.0815),
(-36.6702, 35.7727),
(-84.8862, -47.2677),
(-65.0126, 23.5853),
(74.5878, 22.2154),
(79.354, -70.8478),
(-92.041, 96.7357),
(95.6583, 22.42),
(-35.8284, 33.2501),
(72.094, -34.6758),
(-97.2803, -98.0475),
(59.3516, 76.9435),
(0.302791, -8.42592),
(-84.6728, 0.9551),
(41.1433, -26.5596),
(50.0171, -3.31827),
(-68.303, 75.0512),
(-84.965, 68.7322),
(60.3342, 45.2335),
(-16.1795, 78.2285),
(64.5663, 66.7366),
(34.7501, 79.5964),
(-83.2571, -40.5917),
(-63.1333, 38.276),
(66.616, 45.7663),
(-0.507822, -61.6959),
(84.5285, 89.2285),
(53.3768, 42.9477),
(91.6024, 13.4678),
(-7.22239, 33.2572),
(-97.6589, 47.0923),
(-31.862, -31.0655),
(42.4726, -66.4831),
(86.4271, 16.0946),
(37.4338, 84.248),
(93.157, -94.7163),
(76.8847, -25.0756),
(-64.39, -67.7898),
(-61.8416, -96.5264),
(-58.7373, 15.5093),
(39.9738, 9.13985),
(-73.5342, -13.9573),
(-61.9008, -25.341),
(-67.1476, -65.992),
(45.4513, -79.1555),
(-53.2211, -15.1549),
(13.9876, 89.1),
(-40.1955, 68.3748),
(-95.1469, 69.9005),
(-53.3964, -10.3213),
(80.7919, -4.49677),
(-21.9766, 68.0915),
(25.3349, 58.8641),
(90.1438, -15.9264),
(97.825, 47.8761),
(-15.067, -1.23593),
(-92.7184, -93.9363),
(85.3088, 98.0805),
(55.9273, 14.5769),
(98.9196, -41.9317),
(23.8729, -59.3623),
(69.8144, 57.5852),
(-75.1776, -73.7797),
(74.2376, 43.4575),
(46.1616, 0.461441),
(-26.5788, -56.9401),
(61.3088, -29.169),
(-61.0427, 62.2345),
(-28.7369, -5.51974),
(99.1903, -12.967),
(9.39403, -31.3599),
(-20.3627, -49.4254),
(51.4046, -96.2963),
(-17.9145, 96.2364),
(-15.2607, -50.0682),
(47.3527, -41.5359),
(29.6257, -56.4046),
(-86.487, 24.1516),
(-51.0425, 89.5741),
(56.1279, 18.8455),
(-27.8427, 88.4714),
(-96.1119, -25.8452),
(98.3718, -90.1805),
(-97.4358, -65.0356),
(-85.4703, 89.9322),
(-20.2096, 94.5287),
(27.5646, -51.9427),
(-16.388, 98.0704),
(-82.1905, 71.9339),
(34.5105, 50.6436),
(-82.3188, 28.137),
(65.9578, -88.7528),
(73.7016, -76.3054),
(-96.7707, -18.3056),
(-12.8469, 99.1525),
(-10.9591, 34.8166),
(-60.0732, 76.5184),
(85.5555, 69.7545),
(-12.7069, 73.6799),
(93.1526, -40.1999),
(88.6107, -41.8136),
(-63.1025, -77.3641),
(-58.3198, 84.0293),
(23.9521, 61.4485),
(45.9851, 47.008),
(-72.0084, -17.7366),
(44.7278, 62.8821),
(-89.2908, -50.3842),
(98.8171, -23.5265),
(-19.4029, -65.0703),
(93.8293, 36.2134),
(-22.8926, 98.0867),
(-44.4062, 9.10804),
(-20.6237, 23.2924),
(-51.1454, 27.6162),
(19.1023, -50.6689),
(-33.012, -83.5364),
(37.976, 9.18598),
(19.3601, 33.3324),
(-37.5405, 52.9104),
(53.7549, -48.6245),
(35.3439, -79.8122),
(-4.64331, 4.17503),
(64.4792, 95.5033),
(-29.5845, 57.368),
(-53.0951, 42.1904),
(-53.596, -68.8121),
(26.1298, 41.2376),
(-29.9801, -78.0155),
(28.1525, 70.441),
(65.4107, 80.1551),
(-75.2687, -86.5318),
(74.2148, -10.101),
(-2.4074, 62.971),
(96.7457, -91.3725),
(68.6882, -77.6094),
(90.7202, -74.0459),
(37.7684, 37.4356),
(-7.69563, 28.4682),
(-16.7575, 35.1254),
(71.4322, 88.2727),
(-62.2872, -91.1342),
(-99.508, 52.8819),
(49.137, -34.5048),
(-12.0107, 21.772),
(-93.2157, -96.8514),
(67.4561, 59.3426),
(35.7987, 74.5853),
(34.0507, -68.6856),
(-1.53645, -73.379),
(-30.9802, 3.43155),
(1.99845, 79.6953),
(-34.3016, 17.3936),
(95.6872, -56.594),
(-72.4482, 24.2116),
(70.3997, 77.3241),
(40.3846, 30.563),
(77.5438, 60.36),
(83.4394, -11.3853),
(-46.7177, 19.0094),
(-24.5617, 78.2526),
(-67.5029, 12.3404),
(-55.4943, -6.30098),
(-18.296, -51.0827),
(73.5155, 53.5889),
(85.5373, -63.091),
(31.9837, 21.4853),
(-11.1668, -64.973),
(66.8852, 24.496),
(-72.5159, 62.1248),
(-92.7247, -84.4592),
(-22.3886, -76.7409),
(4.02519, -54.9095),
(-14.9718, -38.2115),
(-36.6671, -77.6903),
(-21.891, -42.8908),
(54.5952, 51.2786),
(46.5729, 89.1238),
(5.05963, -81.8841),
(-40.8332, -76.8383),
(21.6376, -80.3501),
(-11.5402, 18.5105),
(-33.8785, -87.5541),
(-93.2362, -72.9517),
(96.814, 45.9883),
(46.6838, 16.2302),
(94.592, 52.1871),
(97.0211, -11.559),
(50.3171, 46.9901),
(-22.9708, -0.200422),
(-35.6795, -40.0975),
(-5.27098, 83.9628),
(35.004, 88.5378),
(82.5937, 34.371),
(-6.64858, -89.9371),
(25.5821, -14.3431),
(-74.7579, -39.5065),
(-2.20952, -19.8945),
(-21.7713, -0.96182),
(-6.34966, 16.2697),
(21.0971, -62.3715),
(-41.0622, 10.2926),
(-3.79913, -65.7104),
(93.4164, 50.9937),
(30.361, 75.5258),
(86.711, 49.3824),
(91.9482, 9.46496),
(-61.1404, 9.26342),
(41.8247, -62.5428),
(44.1086, 31.8891),
(50.3996, 27.1204),
(-55.689, -73.9055),
(-0.996773, -74.3519),
(3.39302, -44.0298),
(-15.295, -77.3373),
(-2.16862, -10.7588),
(95.5738, -94.4982),
(26.802, 70.2067),
(18.5987, 60.3176),
(7.63016, -79.4473),
(72.4133, 26.9154),
(33.8524, -83.2854),
(12.0486, -29.3414),
(-45.2474, -86.0333),
(49.2163, 61.8432),
(95.2645, -19.5205),
(89.0934, 87.4703),
(26.3268, -77.3398),
(-97.6786, -64.9349),
(80.1859, -32.4256),
(98.3036, 35.9289),
(28.1649, 45.681),
(44.4568, -13.6348),
(-65.0365, -21.8937),
(-22.0346, 11.292),
(-75.5983, 39.0269),
(-62.8504, 3.83846),
(98.2661, -4.20043),
(-75.5713, -42.5437),
(34.5144, -50.5297),
(-8.54322, 74.9361),
(63.5331, 19.2862),
(-60.1199, 86.0846),
(-85.1278, 56.1231),
(27.7078, -78.8735),
(-10.5933, -86.9551),
(13.8288, -45.3784),
(58.8993, -44.4447),
(-1.46549, 88.2752),
(78.0623, -59.9916),
(13.9677, -54.4379),
(-30.2445, -44.7888),
(-5.69231, -77.6514),
(84.8596, 92.0101),
(42.3381, 80.1895),
(54.6714, -63.17),
(-10.4496, 46.631),
(-10.2001, -86.2838),
(-82.1127, -77.6268),
(-7.67664, 30.4565),
(-57.9896, -82.3092),
(-20.236, 0.00991379),
(-41.6764, -17.2745),
(-53.425, 84.484),
(10.4193, 28.2007),
(-33.2082, 87.3548),
(-85.6149, 75.7367),
(-97.568, 50.0437),
(-82.1624, -71.7992),
(-51.8178, 76.5797),
(77.3224, 4.98283),
(32.5513, -97.1004),
(16.71, 19.1812),
(-76.238, -44.5224),
(-69.7624, -53.3314),
(78.7816, -52.2001),
(-59.875, -6.15161),
(-70.1723, -65.5477),
(99.3456, -14.3295),
(46.0398, -91.2418),
(-55.7919, 36.067),
(-65.4935, -74.3411),
(-17.6, -64.389),
(2.59777, 56.9736),
(-93.5099, -90.7236),
(-21.3914, 52.0802),
(-99.7032, 1.73801),
(-38.0834, -49.838),
(-45.8733, 34.6685),
(67.2158, 2.91041),
(57.5324, -83.7844),
(33.4653, -45.9943),
(33.3014, -72.3164),
(-90.7327, -41.8963),
(-99.1823, 70.0442),
(-52.2419, 58.607),
(-76.4839, 12.5528),
(12.9478, 71.9872),
(-73.7241, -98.9287),
(88.1415, -87.8598),
(-10.5511, 17.1935),
(65.3053, -74.294),
(-20.3433, -21.776),
(-34.5016, 11.3149),
(16.5264, 40.2724),
(26.5099, 51.6167),
(-1.90181, 7.74322),
(-7.57388, 43.3591),
(-59.6054, 43.0039),
(-82.996, -87.2616),
(-59.1889, 40.9657),
(52.5785, -94.1886),
(-32.2872, 12.7364),
(41.5173, 97.3748),
(-82.5658, -55.1713),
(42.3808, -34.9895),
(69.2724, 36.0649),
(-45.2348, -36.6868),
(92.5277, 15.2292),
(-21.5321, -66.4662),
(62.7319, 24.2659),
(-98.7305, 33.3339),
(72.7639, 61.31),
(-32.8932, -30.8003),
(58.4874, 38.1179),
(-40.9007, 5.89031),
(17.6545, 29.5727),
(-79.5371, 82.8612),
(-92.729, 11.6084),
(93.8482, -35.0316),
(-15.5798, -34.4632),
(38.9667, 86.749),
(-19.1042, 0.888561),
(-93.6148, 5.99212),
(-98.7447, -34.8553),
(-82.6522, 81.2958),
(95.7163, 91.2048),
(-39.4557, 67.3242),
(83.4373, -11.2508),
(-5.6001, 76.9864),
(-31.0779, 54.7453),
(-57.6794, 79.1202),
(-23.7594, 0.0763357),
(-12.1555, 84.177),
(77.6625, -98.3766),
(-54.4245, -83.4176),
(63.3721, -55.9694),
(0.213501, -23.1958),
(38.8724, 9.51132),
(75.5213, -35.4605),
(-44.016, 43.9214),
(45.8316, 28.0751),
(-50.2526, 70.7544),
(65.3209, 71.4362),
(-97.4186, -37.5401),
(86.3226, 70.9682),
(-88.1237, -72.2972),
(-89.9477, 96.0168),
(24.7213, -62.7651),
(-65.9525, 69.2842),
(-35.6263, -92.4689),
(-47.7082, 94.3869),
(-68.6165, -95.8484),
(-60.7075, 87.124),
(-72.952, 2.60625),
(-34.5088, -21.2443),
(14.5424, 52.6858),
(-59.7563, 78.6763),
(-35.2457, 73.4393),
(45.0705, -11.3787),
(-9.94267, 98.7318),
(80.7903, 49.6746),
(91.8467, 9.35829),
(-84.5905, -18.574),
(-22.2791, 20.1064),
(-46.3367, 17.0515),
(60.6098, 8.96006),
(-70.6229, -46.6703),
(15.1564, -66.3195),
(-41.7457, -96.94),
(98.3793, 64.7503),
(-10.9576, -30.6905),
(32.008, 0.179784),
(11.8156, 14.4687),
(26.187, 77.3048),
(84.0512, 50.4205),
(26.1883, -22.1957),
(-84.6172, 4.92937),
(-63.0562, 74.7948),
(-38.2278, -66.7735),
(-24.4984, 33.095),
(46.4834, 49.0159),
(22.7463, 61.644),
(93.4176, 93.6267),
(89.0818, 42.5603),
(15.1859, -66.9691),
(71.6523, -94.3876),
(-34.3174, 47.9083),
(-24.8468, 38.1839),
(-31.9682, -96.5375),
(-93.9691, 46.6414),
(-60.4265, -52.2514),
(-1.2405, -99.207),
(75.8977, -5.60177),
(67.1755, -38.8508),
(-88.165, 22.1229),
(-71.095, 50.0091),
(83.7882, -10.2637),
(-34.695, 87.9419),
(88.0549, 5.21108),
(86.0497, 91.6691),
(64.625, -33.355),
(-84.1179, 23.2699),
(-54.1782, -89.6868),
(-5.40735, -72.6099),
(-88.7273, 29.8793),
(92.9351, -55.3033),
(-39.4934, -59.2298),
(3.14358, 66.363),
(27.468, -55.578),
(84.4538, 73.9454),
(-50.7364, 53.9873),
(-24.6354, 71.1839),
(-77.3683, -82.4291),
(-29.4715, 82.1477),
(-75.6498, -35.1035),
(18.9209, 76.0269),
(-54.8675, -6.89137),
(48.9528, 57.1519),
(-69.6237, -38.8809),
(90.544, 48.6782),
(-22.5056, 4.65087),
(-33.8933, -89.4004),
(-57.7351, -69.3881),
(-16.0614, 68.0336),
(-83.1691, 42.3929),
(-38.9252, 20.7168),
(0.771563, -72.1154),
(83.9161, -58.1172),
(60.4702, 78.6134),
(-41.3719, -53.1772),
(99.6143, 17.7291),
(-69.3913, 48.759),
(-33.151, 62.7519),
(35.7772, -76.8197),
(45.6616, -8.20792),
(-53.1635, -7.37293),
(-73.7764, 96.8896),
(-39.4034, -21.2882),
(-74.6083, 38.2898),
(29.2807, -93.8206),
(47.9261, -84.5777),
(94.238, 74.7438),
(62.8844, -28.0028),
(-30.4981, 27.3522),
(-94.4352, -88.3557),
(-25.3071, -48.106),
(-52.2957, -88.4746),
(-21.8225, -56.3087),
(-77.7156, -77.689),
(-49.8513, -61.6726),
(-89.7343, 23.3676),
(-74.1801, 29.7078),
(-89.9791, 8.00285),
(-32.4431, 67.4099),
(20.0964, -19.1159),
(-18.2558, 6.90787),
(-49.2388, -62.8713),
(74.0126, -28.9055),
(30.4986, 29.0818),
(-71.8978, 62.9783),
(41.2297, 57.2912),
(19.9224, 49.6819),
(-10.7054, 14.244),
(86.8246, -5.7141),
(74.5552, 30.429),
(45.6559, -68.7078),
(79.3915, 5.7545),
(-77.9068, -37.1633),
(99.941, -8.84691),
(-4.39281, -51.3522),
(-51.4338, -97.0951),
(-47.0626, -10.7366),
(32.1156, -94.6719),
(-71.6381, 87.4701),
(98.2926, 74.845),
(3.72915, -87.8798),
(32.6814, -76.0158),
(71.8733, -83.603),
(-61.2116, -67.0989),
(-56.0579, 44.722),
(56.057, -91.7834),
(1.19599, -67.3025),
(61.6059, -27.3998),
(-72.189, 46.4023),
(51.6891, -17.7317),
(33.6642, -2.63188),
(-35.2899, 92.639),
(-65.1856, 32.544),
(-23.1122, -18.7654),
(-79.9442, -86.6868),
(44.2312, 14.0023),
(-70.2048, 43.5423),
(-98.2685, -88.7659),
(-4.05394, 67.7281),
(40.0061, 21.9092),
(85.6349, -28.2779),
(75.0774, -12.8277),
(-99.2166, 6.47679),
(96.3938, -13.1934),
(32.0069, -61.9206),
(-58.6114, -84.7583),
(-2.06074, -14.7303),
(-28.4962, 6.47351),
(98.3063, -14.5624),
(46.3277, 82.3681),
(77.5083, -19.713),
(-28.4822, 31.0384),
(12.2955, -44.9058),
(78.8897, 55.7885),
(97.3408, 69.3052),
(55.5076, -20.2613),
(-34.7035, 92.4743),
(-19.7196, 62.2665),
(9.62788, 39.8584),
(-33.2451, 17.9366),
(39.1396, 88.6936),
(50.4927, -77.5574),
(-77.5325, 0.864482),
(22.2546, -3.65119),
(1.49795, -14.2341),
(56.5161, -43.5757),
(16.8031, -44.0929),
(53.6854, 76.8176),
(-40.1113, 41.6046),
(1.40678, -68.1542),
(-15.3631, 1.09361),
(71.6628, 52.82),
(13.2665, -20.0055),
(48.7016, 33.8823),
(-43.3047, -98.134),
(-0.693622, -19.9033),
(97.2962, -37.2669),
(-11.6875, -73.9366),
(-54.1209, 90.7947),
(-67.2307, -68.3971),
(79.8692, 20.0175),
(-75.7738, -17.6667),
(-66.5824, -39.843),
(-83.4028, -99.0355),
(56.8125, -24.6282),
(40.3092, -70.5876),
(-80.12, 55.4906),
(0.628964, 82.7391),
(-39.3407, -68.2886),
(-2.50619, 37.4352),
(35.9839, 23.9407),
(22.7885, -33.2658),
(-56.3692, 14.8969),
(79.7056, 18.2937),
(96.1653, -65.9674),
(85.5945, 17.7147),
(23.7211, 52.2692),
(31.4379, 11.1107),
(66.1309, -47.3589),
(-47.9451, -41.0019),
(-8.19691, 31.5703),
(-36.5548, 54.9723),
(-48.8411, 74.8236),
(-51.0818, -2.37847),
(7.09367, -93.0723),
(28.3571, 79.7978),
(4.07987, 74.0996),
(-2.5993, 67.7813),
(0.883309, 38.7577),
(-15.7845, 11.6189),
(-34.6722, -88.1899),
(-46.2264, -63.036),
(-13.713, 56.3662),
(-84.513, -31.9039),
(-2.34619, 64.0223),
(75.3708, 90.5726),
(24.3564, -79.9455),
(-61.3661, -51.2253),
(35.8049, -69.1584),
(27.614, 67.4881),
(-28.5566, 28.352),
(-42.7969, -92.9389),
(69.4005, 34.9311),
(-27.874, -11.3926),
(-47.6984, 12.3436),
(-34.9026, 91.8238),
(71.1182, 70.4853),
(-17.4273, -49.472),
(-81.8841, 46.0825),
(-22.0416, -62.671),
(-75.0715, -26.2714),
(27.0546, 30.1693),
(-63.5368, -17.5258),
(71.6773, 67.6808),
(54.8039, -2.94846),
(0.683507, -33.7449),
(-97.7311, -65.6455),
(78.7938, 90.7148),
(89.6333, -90.034),
(93.3973, -79.0515),
(-96.8889, -48.1377),
(-55.5558, -16.3729),
(-38.5395, 37.8762),
(-87.2375, 74.8965),
(55.3685, -54.449),
(25.3653, -70.6797),
(10.9958, 54.3011),
(-48.7512, 0.792589),
(-22.9124, -16.5074),
(-34.6432, -53.3648),
(-72.3792, 50.3356),
(-42.3454, 63.6105),
(-50.6998, -68.1871),
(-78.0384, -15.5682),
(54.6897, -85.4827),
(56.5319, -55.563),
(11.8154, -88.8639),
(-48.3421, -8.63622),
(24.5497, -49.3791),
(-7.18943, 84.4517),
(-84.0294, 73.6057),
(68.9718, 75.8276),
(15.775, 75.207),
(-34.4347, -47.3775),
(11.5188, -72.1541),
(-40.544, 60.8285),
(95.217, 22.1645),
(50.2113, -63.8254),
(-0.454459, 88.4023),
(7.98403, 35.1235),
(-36.611, -14.1538),
(-44.9489, -46.5639),
(-41.5385, -49.4074),
(39.5648, -31.4568),
(67.3963, 15.6816),
(-16.5964, 13.3758),
(-20.3148, -78.3209),
(41.4014, 37.2552),
(-66.6068, -97.7668),
(-90.9627, 67.3024),
(93.6953, -81.7194),
(14.4294, -37.4345),
(-77.6282, 10.401),
(-75.7647, 97.5134),
(46.0865, -96.7904),
(12.3003, -67.3691),
(-22.9769, -39.2118),
(5.7063, 10.2964),
(3.39856, -23.5533),
(-73.6066, -10.688),
(-21.4271, 75.5151),
(-33.0878, 60.0635),
(-39.4313, 37.8415),
(66.0331, 43.4649),
(26.8421, 32.5743),
(22.3333, 34.174),
(61.9676, -79.5465),
(-79.9366, -59.4266),
(12.3014, 94.7739),
(-51.3857, 48.8694),
(48.6361, -81.5065),
(-86.6444, 33.5231),
(-74.0903, -37.6819),
(51.9559, -56.3587),
(-25.127, -14.5076),
(64.6212, -20.5014),
(-94.7727, -99.5549),
(-32.7488, -23.8244),
(1.16468, 75.2609),
(-77.7765, 64.6782),
(77.2227, 9.11529),
(8.77536, 72.1507),
(75.926, 41.0228),
(31.547, 73.738),
(-93.5946, -61.7121),
(-75.1167, 61.588),
(41.5008, -85.2398),
(39.3746, 4.1814),
(55.3452, -59.8042),
(-53.6457, -15.0828),
(43.3687, 85.3296),
(-84.0297, -25.5445),
(71.93, 38.3288),
(-74.6539, 55.0158),
(30.2756, 96.2265),
(-94.7389, -14.918),
(-23.7818, 3.28305),
(-32.6657, 30.7922),
(93.0787, -35.878),
(29.5907, 64.2174),
(22.02, -80.6691),
(-84.6473, 75.9889),
(35.0332, -73.9399),
(48.6224, 97.9565),
(34.9254, -99.9148),
(92.7384, -4.03847),
(-40.5025, 5.07807),
(50.2838, -91.5913),
(-4.93916, 16.0695),
(-70.3491, 61.192),
(99.4348, -86.0164),
(90.5361, -60.7943),
(99.091, -17.6277),
(-74.3572, 61.0123),
(-90.1058, 11.0006),
(-81.8772, 96.1768),
(85.6679, -31.7845),
(-76.1051, 72.5814),
(-20.8124, 82.1596),
(47.5388, 80.5737),
(0.781009, -63.287),
(4.16253, -25.6682),
(-28.2048, -29.4928),
(-95.7273, -56.8825),
(29.9353, 96.8761),
(13.2205, 38.9884),
(14.0666, -66.5148),
(-57.0452, 1.04886),
(16.0374, 29.6584),
(23.3769, -90.7413),
(-75.654, 65.3857),
(97.9675, 23.8538),
(38.9503, 35.7562),
(-54.616, 17.5243),
(-28.7075, -74.4177),
(-17.4267, 68.8976),
(-0.695302, -21.298),
(-98.9382, 0.482477),
(47.7787, -17.1783),
(63.3865, -64.1834),
(-45.7448, -97.6457),
(97.6683, -54.0023),
(-54.9576, 60.7654),
(-8.09633, 82.0718),
(76.2796, 61.0257),
(-14.3477, -43.6634),
(-39.2155, -76.0895),
(-0.894711, 87.9488),
(74.4307, 37.4766),
(-67.8055, 0.24939),
(-42.2082, -54.3341),
(-59.1534, -94.8165),
(63.2449, 19.6437),
(-42.7238, 92.0977),
(18.6402, -9.12893),
(-42.9539, 90.3829),
(-37.057, -83.9478),
(48.1019, -80.5618),
(82.7234, 10.8491),
(8.19726, 92.6545),
(-8.47965, -40.5619),
(8.7704, 12.257),
(56.9741, 93.3454),
(85.5745, 84.768),
(-56.4246, -97.551),
(20.8522, -49.4925),
(-69.1247, -33.967),
(19.6435, 27.2654),
(-66.0106, 0.871383),
(64.8522, -66.3261),
(41.4987, -17.5746),
(-91.6653, 67.216),
(-3.41298, 7.46675),
(71.1148, -18.0421),
(61.4729, 33.4518),
(-15.0116, 41.3481),
(-63.7132, -59.3876),
(96.0351, 8.46185),
(52.5564, 3.51918),
(-2.44037, -63.8145),
(45.8265, 42.9088),
(72.5026, -59.7133),
(-98.8147, 38.0543),
(91.8434, 8.78687),
(91.2144, 12.8655),
(-44.8546, 56.8879),
(-57.2495, -60.287),
(-22.827, -47.2898),
(18.662, -36.7184),
(60.0184, 76.4742),
(-35.7594, 45.4986),
(28.4224, 53.5117),
(-55.1938, 6.99334),
(92.0769, -5.52542),
(59.3227, 27.6151),
(-33.2051, 58.1283),
(0.374786, 9.11278),
(11.7581, 6.49651),
(-45.6667, -47.6264),
(14.5507, 63.8436),
(34.1109, -93.5639),
(83.0537, 2.11251),
(-30.1052, -72.6598),
(42.7962, 66.6847),
(61.7177, 4.42237),
(25.1779, 41.8216),
(-42.6919, 27.5199),
(-81.0902, -82.1707),
(13.2582, -57.8042),
(-26.8962, -46.892),
(6.67377, -38.1717),
(-80.8065, 4.95907),
(-65.8653, 39.1353),
(97.3121, 11.5907),
(66.8569, -45.5669),
(-75.9357, -47.6733),
(-7.75289, 92.4083),
(-25.6247, -11.073),
(37.7153, -65.7825),
(-94.8615, 41.8535),
(48.265, -27.075),
(7.42442, -76.3083),
(8.63367, -78.0443),
(14.8789, 42.7029),
(99.8106, -70.2184),
(-54.3006, -15.9022),
(56.0986, -59.9716),
(-69.3547, 63.6743),
(31.5335, 34.165),
(90.2577, -47.9609),
(-19.4997, -54.3456),
(-33.0615, 17.7389),
(32.2429, 88.8899),
(18.9249, 60.7973),
(30.8116, -89.6073),
(54.4314, 12.1737),
(37.8362, -95.6698),
(58.6613, -97.3781),
(-11.8856, 63.549),
(-16.0712, -75.7374),
(-77.4221, 61.9712),
(-85.0104, -64.7365),
(-44.6822, -33.8237),
(-66.4933, -77.8219),
(16.0412, 30.1281),
(-96.3615, -84.7),
(21.1846, -9.12504),
(25.4406, -77.0013),
(97.689, -79.7605),
(-94.1405, -53.2401),
(13.1107, -81.0718),
(94.1717, -1.93244),
(-90.2521, 11.8833),
(-61.6675, 63.0034),
(40.7573, 6.26344),
(95.5292, 76.3916),
(64.8546, -7.52674),
(37.9346, -59.9058),
(-6.66442, 68.648),
(26.4428, 87.0895),
(-9.54577, -41.248),
(-62.2704, 61.4427),
(-7.57097, -57.0933),
(90.753, 81.324),
(51.8897, 15.3187),
(0, 0),
Elapsed time in milliseconds : 512 µs Points after transformation
: (-106.248, -58.1698),
(-61.6018, 83.5422),
(-105.348, -35.972),
(54.3004, -76.6603),
(35.1276, -46.689),
(-1.61383, -79.3568),
(-21.901, -37.3247),
(32.1534, -24.9224),
(18.3828, -11.1982),
(31.493, -11.2895),
(-41.6338, -55.6973),
(-66.4939, 25.1685),
(-119.397, -49.7454),
(30.0027, 53.6356),
(83.7458, -43.4284),
(24.1006, -42.6661),
(62.3163, -22.1449),
(-72.4348, -41.1836),
(63.9873, -1.11258),
(59.5244, -42.8837),
(-59.3186, 54.3679),
(-39.5826, 98.9754),
(-24.5117, 26.8174),
(-47.632, 1.00507),
(-9.18853, 93.1998),
(-32.8248, 31.6532),
(-100.296, -72.8247),
(11.0491, 4.38668),
(-63.9475, 87.44),
(108.814, 31.7439),
(49.9217, 51.6688),
(-38.3788, -5.02119),
(34.5697, -66.2669),
(-15.6425, -104),
(-17.5211, -57.5388),
(-52.3147, 29.8076),
(83.4157, -17.4951),
(-0.24054, -9.39056),
(79.7942, -36.1207),
(-38.8874, 99.4708),
(62.9446, -103.765),
(-50.6774, 49.9598),
(-9.3992, 50.3402),
(-11.6267, 41.5884),
(44.2184, 30.4844),
(-53.6605, -6.35316),
(-17.5355, 93.5676),
(-116.296, -57.1239),
(-51.1183, 107.44),
(27.039, -97.9259),
(-103.835, -39.3818),
(97.2087, -0.844381),
(55.2582, -92.6056),
(18.0627, 39.7303),
(-11.5826, -51.0238),
(82.1182, 24.5079),
(-45.1936, 38.823),
(-18.4487, 29.794),
(-65.3099, 15.6852),
(-30.5922, 36.6623),
(58.2648, -65.6673),
(-68.5588, -41.0293),
(-6.91071, 7.48764),
(64.3257, -86.5385),
(-70.0162, -54.7306),
(-119.07, -66.2418),
(-66.7803, 0.554078),
(41.2808, -92.566),
(28.509, 14.9255),
(47.5113, 5.44135),
(-68.2221, 12.7443),
(89.6733, 49.781),
(80.4551, 40.0134),
(-55.716, -71.0838),
(-27.2824, -93.8702),
(30.3795, -5.31545),
(38.9979, 19.0271),
(64.9221, -38.7874),
(21.2894, -27.0575),
(-62.4409, 80.6987),
(-60.6232, 38.0956),
(51.5682, -92.2685),
(61.5652, -82.7693),
(-8.65867, 77.374),
(108.914, 19.3803),
(69.1794, -47.5187),
(-10.5534, -80.7869),
(92.1131, -24.4103),
(-83.9424, 47.0169),
(7.93931, 31.3074),
(51.0087, -54.0866),
(-54.8199, 40.0471),
(-91.4363, 47.0665),
(42.6082, 67.8541),
(-18.2367, -95.6482),
(53.7246, 22.9419),
(-70.9134, 85.2387),
(-71.2766, -17.8766),
(27.2817, -43.755),
(-108.903, -19.1429),
(-45.633, 38.7802),
(50.8673, 76.5933),
(38.265, 2.86955),
(-9.24625, 47.5866),
(15.4493, -9.63377),
(-70.6829, -34.812),
(33.4329, -73.0714),
(59.3285, -108.526),
(-23.3104, 63.4369),
(-5.38714, 34.9323),
(46.466, 59.8946),
(-90.8213, -33.7354),
(-2.08616, 18.3541),
(-54.6093, 49.3736),
(-68.2278, -18.3825),
(-67.0366, 79.1047),
(-30.5763, -79.321),
(18.4448, 47.0329),
(-95.8489, 2.98164),
(-80.5824, -36.0342),
(-3.87832, -47.4658),
(11.8943, -84.4846),
(59.7561, -37.7222),
(-89.7127, -52.2553),
(90.9633, 44.6546),
(-89.6651, 17.4019),
(22.2462, 14.4859),
(-84.3696, 60.7851),
(25.6443, -12.9292),
(-1.96833, -48.4571),
(107.017, 52.909),
(40.7616, -11.8465),
(46.1447, -13.8498),
(-59.2645, -50.8522),
(-16.6523, 23.7141),
(54.2532, 26.7118),
(83.9934, -9.63453),
(-7.45443, -58.9176),
(57.0919, -36.7376),
(-86.2231, 56.3211),
(-25.8341, 43.6856),
(-99.4535, -17.964),
(-56.6329, 41.8817),
(74.1517, -6.96004),
(46.9316, -96.081),
(-57.1268, 119.864),
(94.0317, -13.9452),
(-25.9019, 41.0271),
(52.4275, -59.5993),
(-128.404, -61.4848),
(78.4694, 49.685),
(-6.12827, -10.4642),
(-82.8261, 27.302),
(26.0925, -41.4254),
(42.3527, -22.5968),
(-42.1951, 91.3904),
(-60.0131, 91.1252),
(68.5915, 19.5368),
(7.89338, 76.6223),
(79.8953, 38.3123),
(56.243, 60.5596),
(-95.6477, -12.2422),
(-49.8618, 55.0537),
(74.6791, 17.8979),
(-25.0364, -60.2721),
(106.325, 52.6589),
(61.2715, 19.7576),
(87.1689, -20.9804),
(0.995646, 31.2894),
(-79.3193, 75.1035),
(-44.0814, -20.7931),
(13.7428, -79.414),
(83.198, -16.7478),
(60.3507, 64.0188),
(51.7784, -123.224),
(60.2019, -52.2051),
(-87.1738, -44.2406),
(-94.5667, -72.1266),
(-53.484, 32.1511),
(37.1538, -7.46261),
(-77.4335, 9.48719),
(-70.3736, -5.17844),
(-89.1541, -41.6109),
(12.2266, -92.3432),
(-58.7432, 1.44174),
(39.9595, 76.5674),
(-18.0429, 75.5388),
(-69.1881, 95.692),
(-57.2615, 6.04599),
(70.8854, -34.188),
(-1.01014, 69.0662),
(40.3285, 44.2744),
(75.7847, -48.1198),
(104.74, 9.25035),
(-18.1297, 1.53139),
(-122.715, -59.1735),
(110.074, 60.7157),
(54.0052, -7.78518),
(75.1771, -75.5592),
(-1.31891, -66.3832),
(81.7122, 27.9204),
(-99.3567, -46.1976),
(81.0584, 13.1309),
(40.0153, -17.7298),
(-47.9281, -46.9199),
(44.1632, -50.748),
(-39.7349, 76.8671),
(-32.4412, 2.16031),
(85.2982, -48.419),
(-5.39303, -35.1234),
(-39.524, -41.972),
(11.9849, -110.487),
(12.3964, 94.1441),
(-34.9461, -44.3144),
(26.8291, -57.6211),
(5.09732, -65.562),
(-76.6301, 49.7292),
(-21.0198, 99.1651),
(55.6479, -3.84022),
(0.416917, 90.2255),
(-102.71, 6.00119),
(58.2264, -120.736),
(-117.305, -30.3944),
(-53.2666, 111.229),
(9.65685, 93.3203),
(4.67939, -60.6649),
(14.4563, 95.3485),
(-56.3139, 93.1903),
(46.1552, 33.42),
(-71.3537, 52.0564),
(28.2373, -108.352),
(39.7581, -99.2867),
(-100.762, 13.3144),
(18.1543, 95.1596),
(-1.9864, 34.0284),
(-33.9577, 89.9664),
(100.657, 33.9998),
(9.6088, 71.1628),
(70.345, -71.9664),
(65.525, -71.9364),
(-89.2247, -53.6808),
(-29.7507, 96.4309),
(39.9088, 47.1753),
(55.7051, 26.093),
(-77.2863, 5.41422),
(59.9303, 41.4461),
(-104.656, -19.3937),
(81.3503, -58.2198),
(-43.9509, -57.0083),
(97.0107, -0.353705),
(8.34625, 97.5795),
(-42.1905, 21.2509),
(-14.9986, 26.4856),
(-42.2221, 40.9478),
(-2.84289, -56.5846),
(-63.0364, -69.7341),
(35.2912, -6.7387),
(26.0139, 22.3049),
(-20.8145, 60.0948),
(30.4336, -66.4667),
(2.5, -89.5176),
(-6.48615, 3.06797),
(89.6127, 65.3881),
(-11.8159, 61.5757),
(-39.0905, 55.3145),
(-77.3737, -48.8787),
(35.0716, 27.4313),
(-58.3052, -65.5762),
(46.9212, 54.1991),
(85.2601, 50.6405),
(-103.786, -58.156),
(62.7927, -37.2167),
(15.6445, 57.5859),
(56.2916, -121.303),
(34.6003, -98.805),
(56.5286, -102.96),
(44.719, 19.8921),
(-1.08063, 26.948),
(-7.33285, 36.294),
(93.6867, 56.2215),
(-93.1489, -66.9051),
(-79.0857, 81.1767),
(30.9018, -51.6184),
(-7.41866, 22.1222),
(-124.175, -61.7448),
(80.0936, 30.376),
(55.5218, 55.491),
(5.07422, -78.6159),
(-29.9833, -70.9061),
(-31.5012, 11.3404),
(25.4838, 71.8091),
(-29.8679, 25.5989),
(67.1434, -88.2434),
(-63.4105, 45.0034),
(88.9864, 46.2794),
(44.8376, 12.5393),
(89.9246, 27.8963),
(71.0281, -41.5664),
(-40.991, 31.3474),
(0.0206995, 79.5003),
(-62.8048, 32.1576),
(-57.8645, 10.5405),
(-38.1454, -44.2343),
(83.8306, 22.9024),
(55.3874, -90.8944),
(33.8469, 6.86628),
(-36.1742, -59.7223),
(67.6866, -2.19205),
(-50.5594, 80.6722),
(-119.492, -50.2611),
(-50.7336, -66.9638),
(-18.4628, -55.4358),
(-30.6355, -33.2652),
(-64.4815, -62.9926),
(-38.7349, -35.3077),
(65.255, 27.1753),
(70.6041, 65.4898),
(-26.6789, -81.1495),
(-68.1081, -60.7724),
(-10.5699, -85.3544),
(-8.08725, 18.8954),
(-65.2197, -73.2164),
(-116.053, -39.2676),
(103.147, 7.81992),
(45.8778, -3.08202),
(103.169, 14.4048),
(83.7383, -46.3563),
(59.7719, 24.6006),
(-25.2079, 5.19731),
(-50.7472, -27.9846),
(20.1028, 78.2977),
(59.5275, 68.8797),
(85.8195, 1.74135),
(-40.43, -84.7325),
(15.6235, -24.6387),
(-87.2871, -14.1171),
(-12.397, -20.3911),
(-24.3396, 4.07285),
(-3.9705, 15.0205),
(-4.95378, -68.2668),
(-38.643, 21.2255),
(-29.4984, -62.9254),
(101.657, 13.6832),
(50.7297, 58.2275),
(94.804, 14.4524),
(86.1305, -24.8616),
(-57.871, 27.0973),
(14.4758, -75.4886),
(48.7906, 12.5176),
(53.081, 5.89112),
(-81.0765, -52.9544),
(-29.8073, -72.0047),
(-15.3511, -44.9914),
(-44.2673, -69.9409),
(-9.24654, -11.8157),
(54.125, -123.842),
(45.5717, 54.4389),
(34.4903, 47.9356),
(-23.432, -79.7341),
(73.7082, -1.80046),
(-0.0854495, -92.275),
(-2.20969, -34.1299),
(-75.3906, -67.9138),
(63.7965, 38.9403),
(79.3747, -53.2432),
(110.018, 49.4509),
(-5.1357, -84.1214),
(-117.499, -30.217),
(60.8019, -60.2401),
(101.121, -2.14535),
(38.4986, 30.9158),
(33.6107, -30.4022),
(-72.1475, -0.869189),
(-20.413, 15.6835),
(-61.3255, 60.0057),
(-61.3266, 22.5793),
(87.4155, -39.8619),
(-89.0865, -16.6956),
(11.6949, -61.7038),
(13.9514, 70.9255),
(62.7603, -5.94837),
(-30.7429, 98.9765),
(-64.4614, 79.3256),
(-4.35966, -86.0338),
(-43.1231, -80.5852),
(-5.99878, -49.8142),
(36.6943, -64.2893),
(25.1497, 81.0558),
(49.4152, -85.4341),
(-8.95425, -58.3792),
(-47.2354, -34.2466),
(-35.346, -73.5073),
(107.584, 55.1615),
(63.5792, 58.5324),
(26.3405, -80.4544),
(2.51712, 44.9626),
(-42.5247, -80.0879),
(-107.187, -47.4522),
(-0.385488, 28.8109),
(-86.1022, -60.0719),
(-22.5651, 4.46348),
(-48.611, -4.48371),
(-24.9937, 95.191),
(15.8598, 20.5258),
(-5.00809, 91.0034),
(-58.2381, 97.9321),
(-78.2285, 77.8475),
(-105.249, -41.9562),
(-26.1751, 87.212),
(70.8526, -24.0935),
(-6.01476, -104.82),
(18.7018, 9.90281),
(-90.3874, -18.3288),
(-87.2998, -28.8169),
(52.7456, -78.3536),
(-61.9323, 12.1732),
(-91.8466, -40.1629),
(84.98, -49.7529),
(8.66275, -103.907),
(-43.712, 50.4759),
(-90.443, -50.0242),
(-42.0238, -56.9818),
(18.3073, 50.2422),
(-122.364, -55.8834),
(-5.91402, 53.8132),
(-96.691, 33.1581),
(-56.3254, -36.3236),
(-34.8629, 45.7824),
(60.6445, -22.5993),
(22.0083, -100.811),
(12.2535, -57.0823),
(3.13302, -81.7744),
(-103.121, -10.9223),
(-72.9332, 97.2017),
(-32.6962, 70.4586),
(-71.1763, 35.4166),
(33.1526, 60.8322),
(-106.557, -70.3376),
(49.3985, -115.069),
(-7.60599, 17.3203),
(32.5492, -94.5355),
(-30.0872, -15.9829),
(-32.1265, 19.9518),
(25.7137, 29.7952),
(38.9645, 37.0602),
(-2.69314, 5.48889),
(4.1063, 40.9068),
(-44.9343, 58.297),
(-111.3, -56.2098),
(-45.2371, 56.2388),
(13.8065, -108.905),
(-29.5604, 20.534),
(68.6615, 74.9695),
(-99.9642, -26.1853),
(24.3845, -49.7727),
(73.8719, 7.87183),
(-58.5693, -21.5228),
(88.6389, -19.6395),
(-46.4282, -57.5954),
(63.7033, -0.993556),
(-85.0135, 62.533),
(85.7542, 30.4177),
(-44.9606, -20.1924),
(64.4312, 13.4758),
(-39.9908, 17.0315),
(23.1296, 19.3511),
(-50.097, 102.56),
(-86.7716, 40.0625),
(72.7594, -67.3442),
(-29.9304, -29.534),
(62.6439, 65.848),
(-21.2017, 4.90406),
(-89.5176, 35.0839),
(-108.255, -1.57319),
(-53.5589, 102.15),
(117.517, 50.706),
(-17.7053, 74.2989),
(71.072, -41.4393),
(17.4169, 71.8506),
(-14.1134, 59.6185),
(-30.8208, 91.5972),
(-25.8551, 5.72614),
(13.703, 80.8442),
(35.9638, -121.387),
(-83.1278, -62.3284),
(36.9737, -76.6483),
(-11.2435, -24.3203),
(36.2448, -6.73817),
(55.3825, -61.5046),
(-29.9648, 53.8492),
(49.1114, 8.34479),
(-26.688, 81.2019),
(82.2057, 42.4737),
(-107.923, -4.54915),
(101.792, 34.8796),
(-111.024, -40.3937),
(-55.4036, 118.475),
(-1.68036, -69.8715),
(-41.9497, 85.1676),
(-68.5371, -77.2418),
(-16.2455, 102.554),
(-100.706, -69.1814),
(-30.9413, 100.154),
(-71.2439, 24.8618),
(-43.2244, -10.6576),
(28.0769, 42.142),
(-32.9247, 91.8873),
(-11.6639, 78.6142),
(34.9562, -28.4902),
(20.7415, 93.7748),
(89.3371, 16.7441),
(85.9988, -24.9274),
(-89.4013, 8.9129),
(-17.6403, 24.0541),
(-41.2997, 29.3769),
(56.4943, -14.6611),
(-85.8398, -22.261),
(-11.884, -69.9552),
(-75.8136, -79.361),
(111.009, 24.9265),
(-24.2994, -27.5614),
(26.6122, -13.1733),
(12.4948, 7.13941),
(47.4114, 61.3219),
(92.657, 16.3345),
(13.5185, -32.2282),
(-81.4201, 31.0197),
(-37.3495, 89.3621),
(-62.2301, -52.197),
(-15.3024, 37.0218),
(56.8575, 27.8112),
(38.8418, 47.7698),
(116.181, 53.7661),
(94.7092, 7.2308),
(-12.0776, -70.5759),
(31.6719, -115.589),
(-19.4881, 54.2939),
(-13.8964, 41.9251),
(-66.4838, -82.3132),
(-76.0038, 73.4227),
(-78.1544, -30.9816),
(-38.5031, -95.2902),
(65.9075, -33.5598),
(46.381, -61.8491),
(-78.8989, 48.3934),
(-53.3505, 68.7971),
(71.7381, -40.6308),
(-6.20604, 92.0618),
(81.021, -27.5349),
(108.587, 54.4354),
(45.8551, -55.8132),
(-74.7031, 48.0932),
(-85.0318, -68.3066),
(-33.3607, -68.8644),
(-76.7853, 55.8775),
(64.9956, -86.0925),
(-60.8503, -44.6733),
(22.0189, 58.8842),
(3.35032, -64.0499),
(101.049, 38.3153),
(-32.8543, 65.6024),
(-2.45647, 72.8794),
(-104.363, -53.5834),
(-3.26865, 84.8349),
(-86.6259, -9.67364),
(40.1445, 62.5957),
(-57.4762, 9.7719),
(61.9507, 34.6194),
(-82.2469, -15.2778),
(98.168, 12.4847),
(-23.118, 9.6),
(-65.8625, -74.9472),
(-81.4614, -48.0103),
(4.53162, 66.9968),
(-67.2969, 65.7493),
(-33.0829, 30.2983),
(-27.3829, -70.5043),
(55.5574, -85.6658),
(80.09, 50.874),
(-60.5547, -38.3429),
(96.1532, -19.7032),
(-52.1746, 67.0414),
(-13.3351, 67.8525),
(3.92672, -86.8517),
(36.592, -25.7104),
(-56.0382, 8.7387),
(-39.9021, 113.787),
(-47.8412, -9.03161),
(-60.6458, 58.9755),
(-7.97247, -100.623),
(12.7063, -98.2841),
(110.52, 35.733),
(46.0418, -50.1882),
(-22.8995, 33.6662),
(-122.428, -53.3418),
(-43.7233, -39.0473),
(-82.849, -67.8081),
(-43.2412, -47.9464),
(-103.075, -49.0085),
(-71.4209, -43.4417),
(-79.9503, 50.0983),
(-63.1666, 50.7608),
(-85.4144, 35.7359),
(-11.0829, 71.9908),
(8.84005, -27.2573),
(-18.3536, 10.2744),
(-71.2533, -44.7774),
(56.1969, -54.8276),
(35.0383, 14.5143),
(-49.6875, 81.2641),
(54.737, 37.3811),
(32.1119, 37.4851),
(-8.7558, 14.5997),
(76.1427, -37.3875),
(76.919, 0.773368),
(15.9779, -82.59),
(73.0608, -24.0728),
(-89.4495, -10.8414),
(87.4074, -44.801),
(-25.1655, -49.2236),
(-84.9751, -76.2067),
(-51.448, 3.49793),
(-5.59715, -102.389),
(-41.1003, 104.203),
(114.367, 34.447),
(-29.9722, -86.3333),
(1.28985, -85.0412),
(35.5534, -105.525),
(-83.9501, -44.6737),
(-41.0138, 58.7039),
(17.8963, -107.829),
(-25.3443, -66.1238),
(45.0452, -49.1857),
(-55.6077, 65.7787),
(39.0148, -36.7177),
(27.2115, -16.381),
(-5.16529, 96.6807),
(-53.744, 50.3635),
(-31.665, -12.2092),
(-108.235, -56.709),
(42.8129, -4.34126),
(-54.7165, 62.4139),
(-126.171, -52.4217),
(15.7168, 62.6194),
(41.534, 4.53204),
(67.3379, -58.1966),
(62.6748, -40.0741),
(-94.6193, 37.4478),
(82.5918, -47.6792),
(5.45715, -71.5592),
(-87.521, -62.1627),
(-10.498, -15.5864),
(-28.1295, 13.3543),
(83.9236, -49.6178),
(68.0723, 59.2217),
(62.615, -47.3757),
(-19.7485, 36.4453),
(-7.27945, -48.8475),
(89.6327, 23.1397),
(111.585, 29.5628),
(41.7432, -40.3969),
(-4.67009, 96.3261),
(-0.872323, 62.8208),
(19.0868, 31.7558),
(-28.6896, 25.7495),
(63.4688, 67.6175),
(17.5108, -92.5579),
(-76.1438, 24.7846),
(16.1372, -13.4528),
(-6.98311, -16.3321),
(34.7496, -62.6604),
(-2.76449, -49.6187),
(73.0992, 51.4967),
(-27.0828, 50.3409),
(-25.4363, -66.9964),
(-17.6145, 3.82246),
(81.8268, 22.8105),
(2.11557, -25.7672),
(53.7879, 12.827),
(-77.6861, -79.9526),
(-10.9748, -20.9157),
(75.2398, -70.6203),
(-39.7172, -67.9725),
(-23.4983, 101.361),
(-90.0515, -43.8439),
(78.3686, -10.8255),
(-80.8027, 6.76257),
(-79.7152, -17.2184),
(-115.693, -67.141),
(41.4826, -44.947),
(10.3106, -82.5361),
(-59.9686, 77.025),
(25.2331, 75.1374),
(-63.7926, -53.2425),
(6.85299, 33.611),
(38.4442, 7.81217),
(6.55108, -41.4781),
(-51.4662, 30.7686),
(77.6275, -12.3906),
(64.3999, -97.2192),
(82.967, -14.9409),
(36.5648, 38.6236),
(29.7997, -2.70197),
(42.5006, -69.4926),
(-62.5874, -24.6567),
(-0.495216, 30.0353),
(-19.1854, 61.6976),
(-23.9747, 84.5469),
(-52.3797, 12.7253),
(-28.5777, -92.3614),
(50.3009, 62.9266),
(25.5346, 65.8391),
(17.1026, 62.1738),
(10.4903, 33.6997),
(-14.4253, 13.8618),
(-66.1825, -73.5438),
(-68.4772, -45.9584),
(2.76512, 55.2273),
(-93.8691, -3.64616),
(16.0601, 58.5535),
(98.1732, 57.0421),
(-7.87587, -85.9001),
(-78.6882, -29.6969),
(6.56249, -79.6579),
(45.4091, 51.6063),
(-20.7336, 33.9448),
(-75.439, -75.2411),
(73.6061, 6.76211),
(-33.6305, -3.65526),
(-44.1837, 25.4143),
(-5.07887, 95.7823),
(87.3324, 39.6049),
(-36.78, -43.0159),
(-64.8319, 68.7806),
(-45.6145, -53.8535),
(-83.0736, -1.56672),
(32.1708, 16.71),
(-69.2496, 2.72662),
(86.9027, 36.7776),
(46.9791, -23.8797),
(-14.395, -34.3986),
(-117.79, -30.8672),
(101.44, 56.0098),
(50.0605, -117.621),
(57.3405, -108.578),
(-111.035, -14.6933),
(-61.3532, 1.0919),
(-26.8751, 46.3),
(-60.0499, 97.6949),
(29.9667, -72.4925),
(-3.77093, -77.5321),
(25.2927, 44.8688),
(-49.1083, 14.9129),
(-30.708, -10.1543),
(-54.2923, -40.8113),
(-54.4467, 69.5415),
(-21.6871, 71.7917),
(-74.4378, -49.2776),
(-82.2171, 9.507),
(18.7572, -101.439),
(30.6811, -73.9362),
(-22.7047, -90.0131),
(-51.9355, 5.90859),
(2.71811, -57.2276),
(18.4656, 79.4108),
(-57.4734, 95.3885),
(87.1342, 45.3588),
(36.9075, 62.8964),
(-52.0568, -35.2531),
(-17.2916, -74.2016),
(-20.9412, 68.5624),
(93.5298, -14.0352),
(21.924, -79.5513),
(26.1436, 80.831),
(15.9284, 27.8641),
(-42.7856, -3.27515),
(-61.665, -30.9067),
(-59.4272, -34.7418),
(22.9403, -45.492),
(65.1646, -10.6534),
(-14.5902, 15.7901),
(-49.322, -69.1557),
(48.0733, 18.485),
(-99.4695, -71.6696),
(-66.1392, 91.8239),
(56.7119, -111.188),
(-2.72811, -42.55),
(-72.9852, 33.7833),
(-41.5589, 115.051),
(6.81661, -109.14),
(-14.9268, -69.969),
(-38.5026, -31.4788),
(5.32968, 5.29773),
(-8.37067, -25.7414),
(-76.3879, 12.5857),
(2.03528, 75.8587),
(-14.1914, 65.3033),
(-27.7253, 46.5712),
(73.3471, 15.9326),
(32.7902, 19.0435),
(29.096, 22.0834),
(27.6218, -98.3369),
(-98.9417, -31.0818),
(40.3069, 82.4763),
(-35.2083, 61.0118),
(14.4201, -95.6384),
(-73.5858, 58.5939),
(-86.0379, -12.629),
(26.1077, -73.1255),
(-32.1089, -7.51972),
(50.23, -43.727),
(-126.56, -63.7564),
(-42.4486, -13.6829),
(23.1893, 67.924),
(-54.6355, 84.8649),
(72.1665, -20.1743),
(29.2854, 62.4072),
(81.8164, 10.2666),
(51.2358, 56.1426),
(-112.561, -28.578),
(-53.1875, 81.0535),
(6.43976, -96.7179),
(34.9013, -11.9204),
(28.1206, -77.5195),
(-59.1179, 1.65415),
(66.2991, 63.014),
(-91.2484, 2.16827),
(77.1417, 9.09501),
(-54.9911, 74.7167),
(57.701, 77.7192),
(-97.6973, 15.8072),
(-24.7839, 8.74872),
(-23.7657, 37.6389),
(71.7477, -67.8779),
(46.1534, 47.8578),
(-10.319, -85.7845),
(-57.2425, 97.8396),
(4.20821, -83.8906),
(75.5398, 73.0961),
(-4.74128, -108.275),
(82.2736, -37.8266),
(-39.8931, 16.1322),
(12.5338, -105.681),
(-2.71256, 14.3518),
(-48.8398, 79.0571),
(60.6444, -117.183),
(60.8695, -90.4379),
(83.6172, -52.7671),
(-52.6695, 80.2534),
(-84.5123, 38.5974),
(-47.7612, 115.877),
(66.1745, -61.5047),
(-50.3719, 91.7261),
(4.87661, 81.8964),
(68.5997, 57.1221),
(-24.3666, -62.2071),
(-8.37282, -27.99),
(-40.1072, -20.5602),
(-112.921, -23.3108),
(57.6023, 78.446),
(22.1682, 29.714),
(-12.9752, -69.7675),
(-56.819, 17.9791),
(21.6384, 19.9826),
(-12.4743, -95.7165),
(-52.3989, 84.807),
(96.6912, -13.3838),
(45.2582, 17.9105),
(-48.9228, 32.6417),
(-55.8832, -62.627),
(3.54226, 68.2742),
(-11.4514, -22.2264),
(-96.3994, 31.7171),
(35.5268, -34.8654),
(34.1893, -84.3759),
(-79.8139, -78.6623),
(69.8888, -86.4816),
(-34.5142, 73.413),
(16.8023, 77.4822),
(88.9627, 28.9529),
(-31.906, -38.6036),
(-66.3321, -60.6194),
(25.5752, 80.5545),
(79.2026, 7.4419),
(-67.2081, 20.8928),
(-61.735, -39.1457),
(-91.4569, -71.4347),
(62.6111, -5.51413),
(-12.3389, 98.7041),
(10.8729, -17.3717),
(-13.1394, 97.1702),
(-66.9796, -68.743),
(14.2396, -94.5683),
(77.9288, -20.4179),
(35.7263, 81.8817),
(-25.3324, -37.6866),
(8.87839, 6.09732),
(81.8213, 65.9158),
(105.789, 48.1089),
(-89.8228, -74.9352),
(-0.796881, -56.0747),
(-80.1039, -10.8278),
(24.2137, 16.5042),
(-65.3086, 20.8662),
(34.8374, -86.8898),
(29.4874, -33.0988),
(-66.8292, 91.982),
(-4.2081, 5.74372),
(57.173, -43.6268),
(65.6488, 8.07178),
(-3.57161, 41.5497),
(-83.6754, -36.5714),
(89.6313, -27.1969),
(47.0692, -17.0333),
(-27.5751, -61.6058),
(54.1596, 22.293),
(44.2828, -83.2785),
(-83.4847, 66.9997),
(85.801, -25.4635),
(86.599, -21.4145),
(-26.3363, 66.3259),
(-77.9046, -39.6189),
(-41.1134, -39.1248),
(1.49534, -43.3185),
(78.9365, 49.0167),
(-21.6647, 52.5195),
(41.4082, 38.1904),
(-53.0533, 22.9374),
(81.1451, -38.9993),
(61.6389, 3.31669),
(-14.961, 63.5238),
(-0.0861613, 6.00103),
(9.7251, -0.336388),
(-62.7018, -31.6611),
(31.8856, 52.6296),
(-3.34369, -102.027),
(75.2633, -28.7445),
(-56.5984, -60.4982),
(59.4096, 45.6792),
(55.9903, -19.3049),
(34.3755, 28.3046),
(-34.307, 37.9776),
(-107.774, -52.0727),
(-10.768, -61.3025),
(-44.8038, -37.3646),
(-10.271, -40.6012),
(-77.8271, 29.7495),
(-52.1377, 56.7922),
(91.8977, -24.6902),
(43.7936, -68.055),
(-91.1765, -21.3943),
(20.6462, 87.0835),
(-31.4069, -4.12099),
(9.50858, -77.1348),
(-78.4738, 69.2251),
(32.6128, -44.3359),
(-22.5562, -76.7127),
(-22.0106, -78.7567),
(24.9927, 32.6415),
(66.3792, -102.458),
(-60.0128, 1.10688),
(28.772, -77.9335),
(-47.0594, 81.0522),
(37.7429, 18.941),
(64.9794, -78.2772),
(-40.3886, -46.892),
(-28.5843, 25.5011),
(57.0515, 70.1513),
(34.9605, 48.2755),
(-5.09795, -97.1829),
(51.7801, -9.5351),
(-0.558619, -105.276),
(18.4391, -113.976),
(6.92995, 61.358),
(-44.4522, -68.1723),
(-55.2244, 82.1991),
(-105.521, -34.3457),
(-57.0744, -19.0192),
(-92.5687, -52.9563),
(21.802, 20.4228),
(-122.994, -49.2486),
(13.2665, -18.2347),
(-5.85361, -83.5013),
(61.1339, -110.706),
(-110.189, -20.4268),
(-18.8327, -83.1283),
(84.3385, -36.3348),
(-84.3492, 39.4772),
(-40.0604, 77.8028),
(36.9105, -10.4339),
(112.295, 36.8425),
(54.8692, -31.6079),
(11.7166, -71.6842),
(13.5758, 64.3735),
(50.985, 70.4343),
(-26.5684, -37.9684),
(-41.159, 76.5408),
(-30.1093, -53.5388),
(109.485, 43.1069),
(50.4618, -5.7124),
(-3.54273, -2.43907),