Emgu-WPF 激光雷达研究-绘制雷达图

简介: 原文:Emgu-WPF 激光雷达研究-绘制雷达图 硬件:Hokuyo URG04LX环境:VS2017- win10- 64  Emgu_3.
原文: Emgu-WPF 激光雷达研究-绘制雷达图

硬件:Hokuyo URG04LX

环境:VS2017- win10- 64  Emgu_3.2.0.2682

语言:C#  WPF  

数据解析参考:

https://sourceforge.net/p/urgnetwork/wiki/Home/

https://github.com/bqhdev/urg04lx_data_decoder

http://sourceforge.net/projects/urgnetwork/files/urg_cs_sample/Urg_cs_sample.zip/download

解析后数据:


数据解析封装:

    public class SensorData
    {
        public string DecodeStr { get; set; }
        public double TimeStamp { get; set; }
        public List<double> Distances { get; set; }
        public int Index { get; set; }
    }

    public class UrgSensor
    {
        //private bool IsUseSampleDatas_FromDistances = false;
        //private bool IsUseSampleDatas_FromFiles = true;

        private bool IsUseSampleDatas_FromDistances = true;
        private bool IsUseSampleDatas_FromFiles = false; // 每帧数据从离线文件中获取 --- 提前记录了某一时间段实时数据,离线测试使用

        private bool IsForceUseMetaDatas = false;


        private List<string> SampleDatas;
        private int Index = -1;

        #region Sample Datas From Distance List Excute If Sensor Exception

        // 解析后数据 - 用于Emgu离线绘图测试
        private void InitSampleDatas()
        {
            this.SampleDatas = new List<string>(){
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 25 25 31 32 33 34 34 34 34 34 34 34 34 34 34 34 35 37 40 40 42 43 43 43 43 36 36 36 42 48 48 48 46 46 46 48 49 54 58 63 63 65 67 67 67 67 67 67 67 71 73 103 118 119 126 127 148 148 149 151 157 162 162 0 0 0 0 0 0 7 0 1512 1512 1506 1504 1504 1506 0 0 0 0 0 0 0 0 0 1470 1469 1445 1443 1442 1441 1349 1349 1349 1370 1395 1395 1395 1382 1375 1356 1336 1320 1316 1312 1312 1312 1308 1301 1296 1296 1296 1292 1292 1291 1289 1288 1289 1289 1296 1296 1297 1302 1302 1302 1306 1310 1310 1321 1322 1322 1323 1324 4200 5270 5297 5297 5311 5311 5334 5341 5354 5371 5385 5385 5391 5399 0 0 0 0 0 7 0 0 7 0 0 0 0 0 0 4238 4194 4151 4094 4037 3995 3926 3877 3827 3811 3762 3706 3665 3646 3598 3562 3533 3492 3461 3443 3405 3356 3329 3297 3282 3259 3222 3189 3147 3129 3091 3081 3052 3023 3008 2976 2940 2923 2908 2886 2863 2831 2826 2793 2775 2758 2747 2716 2688 2677 2658 2647 2625 2605 2584 2580 2547 2546 2528 2510 2488 2487 2467 2450 2442 2434 2405 2399 2385 2366 2364 2351 2341 2324 2304 2296 2291 2271 2265 2253 2249 2236 2222 2216 2211 2200 2188 2177 2165 2153 2150 2141 2133 2133 2124 2112 2099 2093 2091 2089 2081 2073 2062 2055 2052 2042 2035 2027 2023 2016 2016 2010 1999 1995 1990 1989 1987 1975 1964 1963 1963 1958 1952 1950 1940 1936 1936 1923 1921 1918 1917 1911 1911 1909 1903 1902 1894 1892 1888 1888 1882 1880 1875 1874 1869 1869 1868 1860 1856 1852 1852 1851 1849 1849 1846 1844 1843 1841 1843 1833 1831 1829 1832 1829 1829 1829 1829 1822 1822 1822 1829 1829 1829 1822 1822 1822 1822 1825 1827 1829 1829 1829 1829 1822 1822 1820 1820 1820 1820 1820 1820 1827 1823 1827 1827 1826 1826 1829 1827 1827 1827 1826 1824 1763 1682 1596 1533 1486 1428 1427 1427 1428 1436 1436 1440 1448 1455 1450 1450 1450 1450 1450 1445 1454 1464 1458 1458 1461 1472 1478 1478 1478 1474 1474 1474 1474 1479 1484 1484 1486 1492 1495 1510 1514 1514 1514 1520 1523 1528 1530 1535 1541 1556 1556 1557 1561 1561 1562 1563 1577 1582 1590 1597 1605 1606 1615 1620 1621 1627 1633 1635 1652 1654 1655 1665 1671 1680 1686 1687 1690 1695 1708 1720 1720 1720 1700 1687 1679 1657 1645 1627 1605 1605 1590 1588 1573 1569 1563 1569 1563 1553 1501 1488 1481 1467 1461 1453 1423 1420 1419 1410 1409 1388 1386 1386 1385 1379 1358 1349 1346 1340 1329 1320 1309 1306 1295 1291 1275 1270 1259 1256 1255 1255 1255 1255 1250 1245 1227 1227 1227 1224 1218 1213 1205 1203 1196 1187 1182 1175 1173 1170 1169 1154 1154 1150 1150 1150 1142 1130 1130 1128 1128 1123 1122 1117 1108 1110 1106 1101 1099 1095 1092 1092 1090 1084 1079 1077 1075 986 985 982 980 977 964 963 963 959 954 954 949 947 941 939 933 931 927 927 925 920 913 907 902 902 899 897 895 894 885 883 881 881 871 871 866 865 865 865 865 861 865 858 851 376 374 374 374 374 375 375 374 368 368 368 466 602 641 642 642 645 647 648 648 648 645 644 642 640 640 640 634 609 605 605 609 609 609 609 462 458 433 270 262 262 244 256 256 244 243 243 243 270 334 361 389 410 410 410 363 186 131 115 107 107 104 107 108 108 101 91 81 81 77 76 78 75 75 75 74 72 61 61 61 61 60 61 61 54 54 52 52 48 50 52 50 47 37 36 36 37 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 28 28 29 28 31 31 28 28 31 31 35 35 35 35 35 35 35 36 36 36 38 42 42 42 42 45 45 45 46 46 46 48 46 48 48 50 52 54 59 54 59 59 63 65 65 67 67 67 67 73 74 95 96 107 131 131 133 133 139 140 149 164 189 0 0 0 0 0 0 7 0 1501 1501 1497 1495 1495 1495 0 0 0 0 0 0 0 0 7 0 1482 1464 1457 1455 1426 1347 1347 1347 1379 1400 1400 1400 1385 1376 1370 1325 1321 1309 1309 1309 1308 1304 1304 1299 1298 1291 1288 1288 1288 1288 1291 1292 1291 1291 1292 1297 1299 1304 1305 1305 1306 1306 1308 1308 1312 1312 1319 4207 5268 5295 5295 5300 5315 5318 5335 5352 5359 5372 5387 5398 5404 5404 0 7 0 0 0 0 0 0 0 0 0 0 0 4369 4299 4198 4122 4075 4044 3991 3936 3888 3826 3809 3766 3725 3684 3635 3587 3559 3549 3505 3459 3434 3405 3360 3331 3313 3267 3243 3209 3183 3160 3138 3102 3068 3051 3016 2997 2974 2952 2927 2898 2885 2851 2834 2818 2796 2776 2749 2737 2721 2697 2680 2653 2634 2625 2610 2589 2574 2538 2538 2527 2509 2498 2481 2461 2441 2436 2430 2415 2399 2390 2375 2366 2338 2326 2324 2312 2309 2285 2275 2256 2254 2244 2228 2217 2211 2207 2198 2187 2181 2164 2160 2152 2151 2135 2122 2122 2117 2113 2105 2087 2083 2078 2070 2058 2055 2049 2047 2035 2033 2026 2018 2017 2013 2012 1994 1989 1985 1978 1975 1970 1968 1965 1954 1950 1945 1938 1933 1933 1933 1928 1925 1925 1918 1914 1913 1902 1901 1900 1895 1895 1887 1887 1880 1880 1874 1871 1871 1869 1869 1861 1853 1853 1853 1850 1849 1849 1844 1841 1841 1840 1840 1837 1837 1837 1837 1832 1829 1829 1826 1823 1823 1821 1821 1826 1826 1826 1826 1826 1825 1825 1825 1825 1823 1823 1820 1820 1820 1820 1820 1820 1820 1820 1820 1823 1823 1824 1828 1828 1828 1829 1829 1827 1827 1813 1777 1686 1593 1530 1475 1438 1438 1431 1425 1425 1429 1429 1436 1443 1445 1447 1447 1447 1447 1448 1451 1451 1460 1453 1453 1458 1461 1481 1486 1487 1487 1486 1486 1486 1486 1486 1489 1497 1497 1510 1511 1520 1520 1522 1522 1522 1527 1536 1536 1545 1545 1547 1550 1561 1561 1571 1576 1580 1591 1604 1606 1607 1614 1616 1620 1624 1629 1638 1652 1652 1656 1658 1662 1675 1685 1693 1705 1711 1711 1711 1711 1709 1704 1688 1678 1659 1641 1628 1611 1611 1586 1582 1579 1575 1566 1562 1535 1530 1508 1483 1472 1470 1451 1438 1434 1434 1428 1428 1412 1390 1389 1389 1389 1380 1356 1352 1333 1331 1327 1316 1313 1306 1289 1288 1278 1267 1260 1260 1260 1260 1252 1246 1242 1235 1235 1233 1228 1222 1210 1209 1209 1205 1202 1191 1184 1182 1178 1170 1166 1165 1163 1154 1146 1146 1138 1138 1129 1128 1127 1114 1112 1102 1100 1100 1100 1099 1095 1087 1087 1087 1084 1083 1082 1071 1061 987 983 981 974 969 965 965 965 963 955 940 938 938 935 935 938 935 929 925 921 918 917 917 906 903 901 899 894 893 893 888 887 883 871 870 870 870 868 868 860 859 851 847 756 382 378 369 369 369 369 374 377 374 377 377 466 610 634 640 641 641 641 641 641 641 641 641 642 642 642 642 640 593 593 593 597 608 608 608 449 448 428 283 262 262 246 256 256 256 240 256 256 266 331 365 383 398 398 398 366 198 122 109 103 103 103 103 103 103 96 96 86 82 76 76 75 69 68 68 66 61 61 61 57 57 62 66 66 66 66 53 53 49 44 44 44 40 40 40 40 38 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 31 31 31 29 29 29 29 29 29 29 29 33 35 35 35 35 36 36 39 35 39 39 41 41 41 41 41 43 43 50 54 51 54 54 57 57 57 59 59 52 52 56 56 63 67 70 71 71 71 76 86 86 108 116 118 135 138 140 149 149 149 156 168 0 0 0 0 0 0 15 15 15 1525 1513 1505 1505 1505 0 0 0 0 0 0 0 0 1480 1478 1478 1461 1443 1442 1427 1351 1351 1351 1388 1391 1415 0 0 0 1357 1356 1314 1314 1314 1314 1314 1303 1295 1295 1295 1295 1294 1288 1286 1286 1286 1289 1295 1297 1297 1297 1297 1300 1308 1308 1308 1309 1311 1315 1316 1321 1323 4217 5283 5286 5286 5308 5312 5327 5342 5360 5370 5371 5379 5387 5404 0 0 0 0 0 0 0 0 0 0 0 0 0 4391 4329 4250 4201 4148 4085 4040 3965 3940 3902 3834 3809 3761 3703 3678 3633 3602 3562 3531 3496 3457 3427 3403 3363 3343 3283 3264 3246 3214 3196 3165 3125 3105 3081 3044 3034 3002 2973 2952 2923 2897 2882 2872 2842 2812 2797 2783 2762 2721 2720 2698 2677 2659 2635 2618 2612 2585 2566 2551 2542 2522 2498 2496 2482 2467 2441 2428 2414 2411 2401 2392 2365 2364 2349 2332 2322 2307 2298 2287 2278 2270 2258 2244 2234 2226 2213 2200 2194 2189 2180 2168 2158 2157 2146 2131 2129 2124 2109 2103 2093 2084 2083 2075 2072 2058 2055 2053 2047 2033 2033 2028 2023 2011 2008 2003 2001 1993 1988 1983 1975 1965 1961 1960 1953 1952 1943 1932 1932 1930 1929 1927 1927 1921 1917 1912 1909 1907 1907 1900 1899 1890 1875 1874 1871 1871 1871 1874 1871 1871 1866 1861 1859 1859 1858 1855 1849 1845 1849 1845 1842 1837 1834 1833 1831 1829 1829 1831 1830 1831 1831 1830 1830 1827 1825 1827 1827 1827 1825 1825 1822 1822 1822 1822 1822 1824 1824 1818 1818 1821 1818 1818 1821 1821 1822 1822 1824 1822 1822 1819 1822 1820 1819 1820 1828 1820 1819 1680 1601 1530 1476 1443 1440 1438 1440 1441 1440 1440 1440 1440 1440 1442 1444 1447 1448 1448 1457 1457 1457 1457 1464 1467 1468 1471 1476 1486 1488 1486 1488 1489 1489 1493 1497 1502 1511 1521 1521 1520 1517 1520 1520 1524 1531 1537 1546 1548 1549 1557 1560 1560 1560 1571 1572 1577 1589 1593 1593 1598 1613 1616 1627 1632 1637 1648 1652 1653 1654 1656 1665 1671 1680 1697 1705 1706 1713 1714 1714 1714 1698 1688 1678 1663 1648 1628 1605 1605 1591 1584 1573 1566 1564 1566 1564 1559 1489 1484 1478 1469 1462 1446 1434 1432 1426 1422 1416 1391 1388 1388 1388 1374 1355 1355 1344 1329 1329 1321 1311 1295 1295 1288 1283 1272 1272 1264 1256 1256 1255 1254 1248 1235 1231 1228 1228 1223 1214 1214 1203 1203 1194 1189 1189 1184 1168 1167 1163 1156 1154 1153 1145 1145 1145 1136 1135 1131 1125 1116 1114 1104 1104 1104 1104 1102 1102 1102 1088 1086 1086 1084 1079 1072 1070 985 979 974 973 973 973 973 970 963 957 956 950 946 941 941 933 932 932 919 919 918 911 907 906 902 900 899 898 898 885 882 882 882 882 882 872 870 864 864 859 856 856 854 846 376 367 367 367 368 368 368 369 369 377 385 470 598 634 644 644 645 644 644 645 646 644 645 646 645 645 645 633 611 608 608 608 620 620 620 457 443 428 280 261 261 251 251 257 251 251 251 257 279 346 361 387 409 409 409 376 198 127 103 103 103 102 103 99 99 99 86 86 86 83 83 82 76 70 70 70 60 60 60 62 62 62 62 55 52 52 52 52 52 52 47 47 46 46 45 45 37 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 29 29 29 29 24 24 24 24 26 30 30 32 34 32 34 34 29 29 36 34 36 38 36 38 40 40 45 46 47 53 50 55 55 55 57 57 59 59 59 59 59 63 63 67 63 67 65 68 68 74 80 105 113 125 126 126 135 138 139 139 153 170 200 0 0 0 0 0 0 0 1519 1492 1492 1498 1493 1493 1498 0 0 0 0 0 0 0 0 1496 1494 1481 1460 1454 1448 1431 1347 1347 1347 1382 1388 1388 1388 1379 1378 1369 1356 1319 1310 1310 1307 1306 1306 1300 1296 1295 1294 1293 1293 1292 1292 1292 1292 1293 1301 1301 1305 1306 1306 1306 1303 1300 1300 1303 1303 1312 1318 1321 4222 5276 5305 5305 5313 5322 5337 5344 5364 5370 5393 5399 5401 5405 0 0 0 7 0 0 0 0 0 7 0 0 0 0 4306 4251 4194 4138 4085 4004 3985 3928 3903 3846 3821 3765 3722 3666 3653 3615 3572 3529 3489 3455 3437 3400 3357 3342 3310 3269 3260 3212 3189 3150 3132 3104 3085 3036 3023 3005 2978 2936 2925 2915 2884 2863 2842 2828 2800 2787 2749 2729 2717 2702 2681 2654 2645 2619 2608 2582 2567 2542 2531 2520 2508 2497 2473 2461 2441 2441 2420 2399 2397 2387 2371 2370 2345 2342 2325 2302 2295 2280 2276 2272 2263 2244 2234 2218 2207 2206 2197 2195 2183 2170 2158 2151 2145 2133 2129 2125 2119 2108 2103 2088 2082 2079 2062 2059 2053 2052 2042 2036 2033 2028 2019 2015 2015 2006 2001 1991 1985 1984 1971 1970 1963 1962 1961 1961 1946 1942 1936 1934 1932 1925 1923 1923 1913 1913 1907 1906 1903 1903 1893 1887 1887 1885 1886 1881 1881 1878 1874 1870 1864 1861 1858 1855 1852 1852 1849 1848 1848 1848 1847 1840 1840 1836 1836 1840 1832 1838 1841 1838 1838 1838 1824 1824 1824 1824 1823 1823 1821 1820 1820 1820 1816 1820 1820 1820 1820 1820 1820 1820 1820 1820 1820 1820 1828 1823 1828 1828 1826 1826 1834 1833 1836 1836 1833 1828 1769 1692 1591 1534 1472 1448 1436 1436 1426 1426 1427 1435 1432 1435 1435 1445 1443 1445 1448 1448 1469 1469 1470 1470 1471 1470 1471 1477 1477 1478 1485 1485 1487 1492 1490 1490 1492 1498 1510 1513 1518 1521 1522 1525 1525 1527 1531 1536 1544 1546 1545 1547 1556 1556 1565 1568 1568 1575 1576 1594 1605 1607 1617 1618 1624 1631 1640 1648 1650 1655 1656 1663 1666 1682 1687 1689 1702 1706 1708 1711 1711 1711 1705 1689 1677 1663 1650 1634 1605 1605 1585 1582 1570 1568 1551 1550 1544 1527 1504 1483 1478 1472 1463 1441 1437 1430 1423 1423 1410 1387 1386 1386 1383 1377 1353 1346 1338 1338 1320 1318 1312 1305 1300 1297 1281 1278 1261 1260 1261 1258 1258 1257 1257 1238 1222 1220 1218 1214 1209 1209 1203 1203 1194 1194 1178 1175 1173 1172 1157 1156 1153 1150 1150 1142 1142 1137 1130 1126 1125 1119 1119 1118 1118 1118 1106 1099 1092 1092 1086 1086 1088 1086 1078 1072 1063 987 986 984 978 978 978 969 967 962 962 954 943 943 943 943 943 938 937 923 919 919 918 911 911 907 904 904 896 894 894 885 882 876 874 872 872 867 866 866 864 858 855 855 755 372 370 370 370 374 376 376 376 376 376 376 452 598 643 643 643 643 643 641 641 643 642 642 643 643 642 637 628 616 601 601 611 611 611 611 447 442 429 286 262 262 257 256 256 249 249 249 249 270 345 352 400 424 424 400 364 188 126 105 99 98 98 98 99 98 98 88 86 86 85 76 76 74 72 65 65 61 59 59 61 60 60 60 60 56 56 56 51 49 47 47 44 41 41 36 34 34 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 29 29 29 34 29 29 29 28 28 28 27 28 31 31 38 38 38 38 36 36 43 43 43 43 43 42 43 48 48 47 48 53 50 54 55 57 57 59 59 59 63 64 65 65 65 66 67 67 67 75 76 107 108 131 140 141 150 150 150 156 166 175 186 0 0 0 0 0 0 7 0 1525 1525 1499 1497 1497 1497 0 0 0 0 0 0 0 0 0 1481 1465 1464 1459 1434 1424 1359 1359 1359 1402 1402 1409 1409 1391 1388 1362 1353 1321 1310 1307 1306 1300 1300 1299 1292 1292 1291 1290 1291 1290 1290 1291 1294 1300 1300 1300 1300 1299 1299 1299 1299 1300 1308 1310 1313 1316 1316 1321 4228 5269 5285 5285 5318 5332 5345 5346 5352 5370 5377 5385 5388 5395 0 0 0 0 7 0 0 0 0 7 0 0 0 0 4290 4264 4209 4124 4093 4022 4022 3980 3937 3849 3817 3769 3712 3672 3648 3619 3557 3520 3500 3461 3432 3408 3367 3339 3291 3269 3238 3215 3189 3160 3127 3113 3073 3045 3024 2998 2966 2951 2922 2904 2874 2859 2830 2817 2790 2782 2750 2742 2709 2694 2674 2655 2642 2631 2606 2583 2575 2554 2551 2515 2507 2502 2482 2460 2450 2430 2416 2403 2401 2401 2373 2360 2351 2349 2322 2306 2295 2285 2273 2265 2256 2247 2234 2222 2212 2197 2194 2189 2180 2168 2159 2154 2146 2138 2125 2120 2115 2105 2105 2091 2086 2078 2068 2065 2063 2053 2044 2041 2033 2032 2023 2016 2010 2001 2000 1990 1990 1985 1982 1972 1958 1958 1958 1958 1958 1944 1942 1931 1930 1925 1922 1920 1916 1908 1903 1900 1897 1888 1887 1887 1885 1885 1879 1875 1870 1867 1867 1863 1860 1860 1856 1856 1856 1853 1853 1851 1848 1848 1844 1842 1844 1841 1836 1837 1834 1832 1830 1828 1827 1825 1824 1824 1825 1825 1826 1827 1827 1827 1827 1827 1828 1828 1828 1826 1823 1823 1823 1823 1827 1827 1825 1827 1825 1825 1827 1828 1828 1830 1831 1835 1830 1831 1831 1827 1777 1685 1595 1539 1483 1436 1434 1434 1436 1440 1443 1446 1443 1440 1439 1439 1439 1445 1452 1454 1454 1454 1453 1455 1455 1455 1461 1468 1470 1474 1475 1481 1482 1488 1489 1494 1494 1494 1506 1511 1513 1517 1520 1521 1524 1526 1531 1533 1543 1544 1554 1560 1560 1560 1560 1574 1577 1583 1585 1599 1606 1607 1607 1614 1622 1635 1635 1641 1646 1658 1660 1665 1674 1676 1690 1699 1700 1702 1707 1721 1721 1721 1700 1693 1678 1655 1643 1632 1612 1612 1591 1587 1579 1564 1556 1546 1538 1521 1502 1491 1490 1473 1467 1443 1434 1434 1431 1428 1407 1393 1391 1391 1391 1374 1352 1342 1341 1340 1339 1321 1309 1305 1297 1296 1272 1270 1267 1262 1260 1260 1260 1253 1241 1233 1231 1231 1222 1219 1202 1202 1202 1200 1197 1185 1174 1173 1173 1168 1168 1167 1155 1148 1148 1143 1138 1136 1130 1128 1113 1113 1113 1111 1110 1109 1103 1098 1094 1093 1088 1079 1079 1074 1071 1067 1060 994 981 978 972 970 968 967 961 961 957 952 949 947 945 945 937 934 934 928 926 916 914 912 907 903 903 903 899 899 895 883 881 881 872 872 866 865 864 861 860 859 858 850 751 382 372 372 372 374 374 374 374 370 370 375 459 604 644 644 644 644 649 641 644 644 644 641 641 641 641 633 630 610 608 608 610 618 618 618 457 453 424 292 264 264 257 257 257 245 244 244 244 284 336 361 395 415 415 415 378 184 124 116 99 99 99 99 102 102 99 96 78 78 77 76 70 70 70 71 71 71 68 68 66 66 66 65 61 59 56 56 56 56 51 51 46 46 41 41 38 38 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 33 33 33 33 30 25 30 30 30 24 28 28 28 34 42 42 42 37 37 37 37 39 39 33 33 39 51 51 51 46 46 46 47 48 56 59 66 66 63 63 59 59 61 61 61 64 70 72 76 84 95 102 113 7 145 145 145 145 151 159 164 170 185 0 0 0 0 0 0 7 0 1530 1530 1500 1492 1492 1500 0 0 0 0 0 0 0 0 0 1487 1466 1448 1444 1443 1425 1348 1348 1348 1371 1401 1401 1401 1386 1380 1363 1331 1311 1306 1303 1303 1303 1303 1303 1294 1294 1293 1288 1287 1287 1285 1285 1287 1288 1287 1287 1287 1298 1297 1298 1305 1316 1305 1316 1318 1316 1318 1329 4204 5279 5304 5304 5305 5315 5334 5347 5350 5366 5384 5392 5392 5403 0 0 0 0 7 0 0 0 0 7 0 0 0 4369 4308 4259 4204 4144 4064 4021 3976 3932 3893 3840 3792 3749 3722 3681 3647 3614 3574 3533 3494 3474 3435 3391 3359 3331 3296 3283 3240 3224 3193 3157 3127 3102 3089 3049 3016 3011 2975 2948 2939 2897 2880 2867 2836 2825 2794 2771 2750 2732 2721 2702 2676 2654 2638 2620 2604 2585 2583 2557 2546 2523 2494 2488 2484 2468 2444 2442 2416 2406 2401 2382 2364 2364 2363 2337 2319 2308 2307 2283 2276 2274 2249 2244 2229 2220 2216 2208 2198 2187 2180 2167 2164 2143 2139 2139 2132 2116 2112 2101 2101 2090 2084 2079 2069 2061 2060 2045 2044 2037 2029 2028 2023 2019 2011 2007 1996 1994 1989 1987 1980 1965 1962 1959 1952 1945 1945 1944 1944 1933 1931 1922 1918 1918 1917 1915 1906 1902 1895 1892 1892 1891 1887 1884 1882 1877 1868 1868 1865 1863 1861 1861 1861 1856 1853 1851 1850 1850 1850 1850 1843 1841 1836 1836 1834 1834 1834 1834 1834 1829 1829 1829 1832 1832 1832 1827 1822 1822 1821 1821 1825 1825 1823 1824 1823 1818 1816 1810 1810 1813 1813 1818 1819 1820 1821 1821 1821 1821 1819 1819 1819 1824 1826 1826 1824 1816 1777 1695 1597 1528 1481 1435 1435 1435 1435 1435 1435 1435 1435 1435 1439 1447 1448 1458 1458 1466 1466 1469 1469 1461 1461 1461 1461 1461 1473 1479 1481 1481 1481 1492 1492 1493 1493 1493 1513 1513 1517 1520 1522 1522 1522 1522 1523 1543 1543 1544 1549 1551 1552 1555 1568 1572 1580 1586 1591 1592 1599 1603 1607 1619 1623 1629 1634 1640 1650 1663 1664 1667 1667 1682 1685 1690 1700 1703 1707 1722 1722 1722 1703 1690 1671 1666 1654 1622 1602 1602 1586 1584 1577 1570 1561 1561 1559 1554 1494 1493 1477 1475 1453 1445 1433 1428 1422 1415 1408 1388 1384 1384 1384 1381 1349 1346 1346 1340 1331 1315 1305 1304 1301 1293 1283 1278 1268 1263 1263 1263 1257 1242 1239 1234 1228 1225 1225 1225 1218 1212 1205 1193 1193 1187 1184 1179 1177 1175 1173 1163 1148 1148 1147 1145 1143 1134 1132 1132 1127 1118 1118 1110 1103 1103 1102 1098 1096 1091 1090 1090 1089 1087 1071 1067 1057 996 988 979 974 974 968 965 959 955 948 945 945 947 945 946 946 935 934 925 924 916 909 905 900 898 897 895 893 892 889 882 881 881 879 873 871 871 863 858 856 856 856 855 738 384 375 374 374 375 375 377 377 376 376 377 474 605 638 642 642 644 646 642 642 646 642 640 640 640 639 639 636 609 604 604 609 614 614 614 463 442 427 282 261 261 255 250 250 241 236 236 236 267 336 351 391 396 396 396 369 178 118 114 114 105 105 105 105 102 101 94 88 83 80 80 78 71 71 67 64 64 64 64 66 66 66 65 56 56 56 54 54 58 53 53 48 46 45 39 39 41 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 33 33 33 33 32 30 30 30 30 31 34 35 35 34 34 35 42 42 42 42 40 40 40 40 44 44 39 44 44 44 51 55 55 56 56 57 56 59 59 59 55 59 59 62 65 69 65 64 69 69 85 97 107 122 125 142 142 146 146 150 152 154 173 0 0 0 0 0 0 7 0 1503 1503 1500 1496 1496 1500 0 0 0 0 0 0 0 0 7 0 1473 1471 1454 1429 1418 1350 1350 1350 1385 1396 1400 1400 1385 1368 1364 1321 1313 1311 1309 1309 1309 1309 1306 1298 1292 1289 1289 1289 1285 1289 1291 1292 1293 1298 1298 1300 1300 1298 1301 1299 1299 1305 1309 1315 1317 1321 1322 4216 5278 5284 5284 5307 5311 5341 5348 5350 5356 5369 5382 5382 5397 5413 0 0 0 0 0 0 0 7 0 0 0 0 4366 4291 4263 4194 4142 4088 4028 3999 3940 3891 3854 3822 3766 3708 3673 3646 3614 3571 3531 3491 3460 3436 3410 3363 3334 3298 3266 3243 3205 3181 3161 3139 3104 3091 3050 3017 2996 2972 2942 2915 2908 2882 2861 2832 2826 2796 2781 2757 2723 2718 2704 2685 2667 2637 2614 2604 2582 2570 2556 2543 2512 2507 2493 2469 2461 2460 2430 2412 2403 2393 2392 2382 2369 2340 2334 2321 2310 2297 2293 2277 2277 2264 2247 2231 2226 2218 2203 2196 2189 2181 2167 2154 2147 2142 2136 2130 2117 2113 2108 2105 2093 2084 2069 2068 2060 2057 2050 2046 2044 2033 2027 2023 2014 2010 2003 1991 1979 1978 1975 1971 1971 1969 1967 1953 1950 1947 1931 1931 1931 1929 1926 1923 1921 1920 1908 1905 1905 1901 1900 1888 1886 1878 1878 1878 1878 1875 1878 1870 1866 1866 1863 1859 1858 1858 1858 1857 1852 1851 1849 1846 1846 1847 1845 1844 1834 1831 1830 1827 1827 1826 1825 1827 1832 1832 1832 1832 1830 1824 1819 1820 1820 1820 1820 1820 1820 1819 1818 1818 1818 1819 1822 1827 1827 1822 1822 1822 1822 1834 1834 1834 1833 1826 1826 1826 1826 1783 1675 1595 1532 1478 1437 1437 1437 1440 1440 1441 1442 1443 1443 1444 1445 1445 1451 1456 1460 1460 1460 1460 1463 1468 1471 1472 1475 1482 1486 1489 1489 1491 1491 1491 1491 1491 1492 1505 1511 1512 1519 1521 1521 1522 1524 1526 1538 1541 1543 1551 1552 1556 1562 1566 1569 1575 1586 1587 1594 1598 1608 1613 1624 1629 1630 1630 1645 1646 1650 1660 1661 1664 1677 1687 1688 1696 1705 1717 1717 1717 1717 1711 1681 1670 1657 1653 1648 1608 1608 1578 1578 1577 1568 1561 1561 1556 1547 1503 1486 1476 1472 1464 1449 1426 1426 1421 1416 1405 1398 1386 1386 1386 1376 1351 1349 1344 1338 1320 1318 1317 1313 1300 1293 1276 1267 1266 1262 1262 1262 1253 1253 1253 1242 1232 1224 1224 1224 1222 1205 1195 1195 1194 1191 1183 1175 1175 1174 1169 1166 1160 1143 1142 1141 1141 1135 1129 1128 1122 1117 1116 1113 1108 1113 1104 1102 1102 1093 1093 1091 1083 1079 1078 1067 1067 998 976 976 974 971 971 971 960 953 952 947 947 947 947 947 937 928 927 925 924 917 915 908 906 906 906 901 901 901 896 882 878 875 873 872 872 872 872 860 856 855 852 846 741 375 374 370 370 374 377 377 377 371 371 371 476 606 639 641 644 644 642 642 642 642 641 648 648 641 639 637 627 611 608 608 608 618 618 618 455 449 425 287 263 263 248 254 254 243 243 243 243 270 343 367 385 402 402 402 372 198 122 114 98 98 98 97 97 101 97 95 93 85 85 77 71 70 70 68 68 68 67 67 70 70 67 64 55 54 52 52 52 49 49 47 43 43 40 34 34 34 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 33 29 29 29 33 30 31 31 33 31 31 33 33 34 34 34 34 34 30 37 37 37 36 38 38 41 45 46 46 46 51 57 57 57 57 58 53 56 59 59 56 59 61 62 62 64 65 65 64 65 69 98 117 122 129 129 145 145 150 150 156 161 173 0 0 0 0 0 0 7 0 1508 1508 1498 1491 1491 1491 0 0 0 0 0 0 0 0 1486 1481 1466 1458 1442 1437 1433 1351 1351 1351 1378 1389 1389 1389 1382 1374 1362 1356 1315 1315 1315 1314 1312 1312 1300 1297 1297 1293 1290 1288 1288 1288 1288 1299 1302 1302 1299 1299 1299 1297 1297 1301 1310 1313 1313 1314 1314 1319 1323 4206 5263 5284 5284 5313 5320 5321 5331 5348 5368 5373 5383 5383 5401 5383 5383 7 0 0 0 0 0 0 0 0 0 0 4374 4284 4253 4195 4125 4076 4039 3978 3930 3887 3849 3800 3749 3710 3660 3638 3610 3565 3529 3493 3460 3427 3391 3359 3336 3303 3270 3249 3225 3190 3163 3128 3098 3076 3057 3021 3001 2980 2951 2933 2909 2880 2857 2838 2809 2788 2783 2758 2726 2714 2690 2672 2668 2643 2623 2609 2590 2573 2558 2549 2518 2502 2485 2468 2462 2448 2439 2421 2412 2403 2391 2366 2356 2340 2337 2327 2306 2294 2292 2276 2263 2259 2245 2224 2224 2217 2202 2196 2181 2180 2171 2157 2154 2145 2140 2126 2122 2114 2114 2095 2093 2086 2085 2073 2061 2057 2051 2047 2037 2028 2026 2021 2009 2008 1998 1998 1998 1989 1974 1973 1972 1967 1959 1958 1955 1948 1944 1936 1932 1930 1927 1924 1916 1916 1914 1910 1910 1906 1902 1894 1892 1886 1878 1878 1878 1876 1874 1871 1869 1862 1862 1859 1858 1853 1853 1846 1846 1846 1846 1842 1842 1842 1840 1837 1834 1832 1832 1830 1830 1827 1827 1827 1830 1830 1834 1834 1831 1830 1831 1830 1830 1827 1827 1822 1826 1818 1818 1821 1821 1812 1821 1812 1812 1817 1820 1820 1830 1830 1830 1829 1829 1820 1829 1829 1820 1769 1681 1589 1530 1482 1437 1433 1433 1429 1429 1429 1433 1438 1443 1448 1448 1454 1451 1451 1454 1456 1464 1464 1464 1473 1473 1474 1477 1480 1482 1489 1491 1491 1489 1492 1492 1494 1500 1500 1510 1511 1511 1525 1525 1527 1531 1534 1537 1545 1553 1556 1556 1563 1563 1569 1571 1578 1582 1597 1606 1606 1606 1618 1620 1622 1624 1628 1644 1653 1655 1658 1660 1665 1673 1685 1697 1697 1705 1717 1717 1717 1717 1698 1687 1681 1654 1646 1632 1610 1610 1586 1586 1584 1568 1558 1558 1557 1550 1512 1485 1478 1473 1463 1445 1436 1436 1423 1419 1400 1394 1387 1387 1387 1372 1355 1354 1341 1341 1322 1313 1312 1308 1305 1291 1277 1276 1274 1264 1264 1264 1256 1256 1242 1241 1238 1230 1228 1221 1218 1217 1201 1199 1190 1180 1175 1173 1171 1170 1161 1153 1153 1149 1140 1140 1132 1129 1127 1127 1120 1116 1115 1113 1113 1112 1104 1097 1095 1095 1091 1091 1079 1079 1078 1076 1072 994 987 983 976 966 964 963 963 960 952 947 947 945 945 941 938 936 919 919 919 919 919 908 907 907 903 899 894 891 890 888 878 876 874 873 865 864 864 858 857 856 856 856 850 377 374 367 367 367 370 370 370 370 377 377 471 609 639 642 645 645 643 646 643 643 643 643 641 639 637 636 630 620 615 615 615 622 622 622 458 454 429 289 266 266 252 261 261 252 252 258 258 258 322 368 391 405 405 405 361 200 123 110 109 103 98 98 98 98 98 98 86 82 82 80 80 77 71 68 63 62 61 61 62 63 63 63 60 55 50 50 53 50 53 53 49 45 44 44 42 41 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 33 33 37 37 37 37 37 28 28 28 31 34 36 34 34 34 33 33 32 32 32 34 34 40 40 44 44 45 46 48 49 48 48 49 54 56 56 59 59 59 54 59 59 68 68 69 68 67 67 76 76 99 109 119 140 140 149 154 158 158 159 164 164 0 0 0 0 0 0 7 0 1520 1520 1513 1488 1488 1488 0 0 0 0 0 0 0 0 1472 1470 1464 1461 1454 1428 1428 1353 1353 1353 1365 1378 1380 1380 1378 1361 1355 1343 1324 1316 1312 1305 1302 1300 1298 1298 1298 1298 1298 1290 1289 1286 1286 1286 1291 1291 1291 1291 1291 1290 1291 1301 1301 1308 1309 1311 1314 1316 1320 4194 5271 5292 5292 5314 5319 5339 5344 5345 5370 5381 5387 5391 5399 0 0 0 0 0 7 0 0 0 7 0 4595 4423 4346 4298 4228 4196 4136 4080 4041 3973 3915 3896 3849 3817 3750 3720 3668 3642 3608 3552 3526 3491 3461 3414 3389 3357 3332 3307 3272 3248 3218 3185 3160 3149 3104 3074 3043 3018 2995 2983 2946 2926 2902 2888 2861 2841 2820 2798 2780 2764 2732 2715 2698 2665 2664 2641 2619 2601 2579 2562 2549 2532 2511 2497 2488 2472 2459 2457 2429 2418 2400 2394 2393 2372 2369 2349 2339 2325 2318 2294 2283 2279 2266 2258 2251 2230 2224 2214 2204 2199 2192 2180 2168 2153 2152 2144 2130 2128 2125 2114 2104 2096 2088 2083 2071 2059 2059 2053 2051 2050 2034 2031 2025 2021 2016 2006 2006 1995 1989 1982 1980 1979 1972 1967 1966 1950 1950 1949 1938 1937 1937 1926 1926 1925 1922 1915 1909 1907 1903 1902 1902 1893 1888 1887 1886 1879 1876 1871 1867 1866 1864 1862 1858 1858 1858 1855 1855 1850 1847 1845 1842 1839 1839 1840 1839 1839 1839 1834 1834 1828 1828 1828 1832 1828 1827 1821 1827 1819 1818 1819 1818 1818 1820 1820 1820 1821 1821 1822 1822 1822 1822 1825 1821 1826 1826 1828 1828 1828 1829 1829 1829 1828 1828 1827 1827 1828 1827 1827 1677 1593 1540 1482 1428 1427 1427 1427 1427 1434 1436 1441 1436 1441 1447 1456 1460 1460 1460 1457 1457 1457 1457 1460 1471 1471 1471 1478 1481 1485 1485 1491 1491 1486 1491 1491 1497 1502 1510 1513 1516 1519 1521 1521 1531 1531 1535 1545 1549 1550 1551 1554 1559 1564 1573 1577 1600 1601 1603 1605 1610 1610 1612 1623 1624 1632 1638 1641 1646 1656 1657 1664 1673 1682 1695 1703 1707 1709 1711 1711 1711 1699 1690 1678 1661 1641 1628 1606 1606 1589 1579 1569 1567 1553 1553 1551 1525 1507 1486 1485 1474 1463 1454 1433 1433 1420 1420 1409 1384 1381 1381 1380 1379 1365 1345 1342 1336 1324 1321 1315 1301 1297 1289 1274 1263 1263 1262 1259 1254 1247 1247 1247 1246 1231 1229 1227 1218 1215 1209 1203 1198 1186 1185 1185 1183 1174 1169 1168 1166 1165 1152 1141 1141 1141 1137 1137 1137 1125 1120 1116 1113 1112 1107 1099 1093 1085 1091 1091 1084 1084 1087 1078 1070 1070 1003 978 978 976 976 967 966 963 957 953 952 942 940 939 937 934 932 931 924 924 921 920 917 902 900 900 896 894 893 893 892 884 877 874 874 873 867 866 865 862 854 854 854 849 385 380 376 376 369 369 372 372 372 375 384 458 596 634 637 637 637 637 645 645 645 645 645 645 643 643 636 635 623 613 613 613 621 621 621 467 446 426 279 267 267 256 249 249 249 247 249 250 273 323 360 392 409 409 409 379 183 141 118 101 99 98 98 98 96 92 89 89 85 83 78 77 77 75 70 62 61 61 61 61 62 67 63 62 62 61 57 54 49 46 46 46 44 41 34 34 34 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 29 29 31 29 29 29 26 24 26 26 27 30 30 30 37 37 37 39 39 40 40 41 38 38 38 48 48 49 49 48 49 47 46 47 50 52 62 63 63 67 67 65 63 65 63 63 63 66 63 66 70 105 107 128 130 133 139 150 150 155 159 163 168 0 0 0 0 0 0 7 0 1506 1506 1490 1490 1490 1497 0 0 0 0 0 0 0 0 7 1473 1470 1465 1447 1443 1425 1364 1364 1364 1383 1384 1384 1384 1384 1376 1372 1347 1331 1308 1308 1308 1308 1308 1301 1299 1299 1299 1290 1289 1288 1288 1288 1291 1292 1299 1304 1305 1305 1307 1307 1307 1307 1307 1316 1316 1316 1316 1316 4217 5274 5296 5296 5308 5310 5323 5330 5344 5362 5366 5382 5397 5404 0 0 0 7 0 7 0 0 0 0 0 0 0 4367 4323 4235 4191 4149 4086 4040 3987 3927 3898 3852 3820 3762 3699 3665 3633 3598 3569 3548 3493 3449 3432 3410 3355 3343 3304 3278 3252 3221 3179 3163 3120 3107 3085 3042 3024 2987 2975 2945 2936 2916 2883 2854 2825 2822 2789 2781 2755 2737 2712 2692 2682 2672 2642 2606 2601 2584 2564 2558 2537 2523 2510 2498 2474 2463 2452 2443 2406 2400 2391 2378 2369 2355 2345 2340 2326 2316 2300 2290 2280 2268 2245 2242 2236 2223 2214 2209 2195 2192 2177 2172 2157 2145 2142 2138 2136 2122 2105 2100 2097 2094 2085 2068 2068 2065 2063 2049 2042 2039 2034 2018 2018 2013 2010 2004 1998 1997 1982 1977 1967 1967 1966 1963 1952 1950 1945 1940 1937 1937 1928 1927 1920 1919 1915 1914 1912 1900 1900 1897 1896 1894 1892 1881 1880 1880 1880 1874 1863 1863 1863 1861 1858 1858 1858 1858 1855 1845 1845 1845 1843 1843 1833 1833 1833 1830 1830 1830 1829 1829 1829 1817 1817 1822 1822 1822 1823 1822 1821 1823 1820 1820 1820 1820 1820 1819 1822 1819 1825 1819 1821 1821 1824 1824 1824 1824 1823 1823 1823 1827 1832 1832 1832 1828 1828 1822 1773 1682 1591 1531 1474 1443 1430 1430 1431 1435 1435 1449 1449 1449 1452 1452 1452 1452 1455 1455 1458 1458 1458 1458 1458 1460 1465 1468 1468 1481 1482 1492 1492 1482 1488 1488 1488 1500 1500 1511 1514 1514 1529 1529 1529 1529 1530 1533 1538 1548 1553 1553 1557 1563 1564 1565 1571 1585 1600 1601 1604 1609 1622 1622 1623 1631 1631 1638 1643 1646 1656 1663 1668 1673 1678 1693 1700 1700 1723 1723 1723 1713 1703 1686 1684 1664 1654 1637 1602 1602 1585 1585 1585 1562 1562 1546 1544 1529 1506 1481 1478 1465 1464 1444 1441 1438 1432 1418 1409 1384 1381 1381 1381 1369 1357 1348 1344 1341 1338 1315 1312 1302 1292 1288 1286 1278 1270 1267 1266 1264 1250 1246 1235 1234 1230 1229 1225 1217 1210 1206 1203 1198 1197 1197 1192 1175 1173 1160 1160 1156 1152 1151 1149 1145 1137 1137 1132 1132 1130 1123 1122 1116 1115 1114 1113 1105 1103 1090 1086 1084 1083 1083 1083 1074 1072 992 979 979 978 978 968 966 960 954 951 951 943 935 935 932 931 930 930 925 924 914 908 908 904 904 896 894 894 893 885 884 881 875 875 871 871 871 866 856 855 855 855 855 849 378 363 363 363 364 366 369 374 372 374 374 454 596 641 643 643 645 645 642 642 653 644 644 644 642 640 635 630 612 610 610 611 611 611 611 469 454 430 282 254 254 238 254 254 248 248 254 254 282 332 364 404 413 413 404 359 192 125 113 98 98 107 100 100 100 89 86 86 79 74 73 73 74 74 72 72 63 62 62 62 62 62 54 54 54 54 56 56 53 53 51 46 45 45 43 38 38 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 31 31 31 31 28 28 26 28 26 26 28 34 28 34 31 33 33 37 34 37 38 37 38 38 40 40 46 41 46 49 49 50 51 55 55 59 59 59 59 56 56 62 62 66 66 67 67 66 66 68 100 100 114 119 126 153 153 153 153 162 165 169 191 0 0 0 0 0 0 15 15 15 1524 1509 1509 1509 1510 0 0 0 0 0 0 0 0 7 1478 1464 1458 1445 1444 1443 1361 1361 1361 1403 1404 1409 1404 1404 1384 1365 1332 1320 1315 1313 1309 1308 1308 1298 1297 1294 1291 1290 1288 1288 1288 1289 1290 1291 1294 1296 1301 1302 1302 1301 1301 1306 1306 1307 1308 1313 1316 1319 4187 5273 5300 5300 5311 5318 5334 5345 5347 5368 5370 5370 5391 5393 0 0 0 0 0 0 0 0 7 0 0 0 0 7 4368 4258 4188 4140 4102 4025 3980 3930 3905 3836 3794 3763 3711 3665 3637 3603 3555 3538 3499 3467 3439 3397 3359 3335 3295 3271 3237 3228 3183 3159 3142 3106 3076 3046 3021 3006 2982 2948 2921 2904 2883 2854 2831 2824 2793 2779 2757 2735 2724 2705 2678 2656 2636 2622 2611 2586 2569 2550 2539 2512 2496 2489 2484 2455 2447 2440 2420 2414 2400 2385 2365 2364 2341 2332 2324 2315 2297 2290 2277 2262 2249 2245 2239 2239 2222 2220 2197 2185 2181 2170 2154 2149 2148 2131 2126 2121 2115 2109 2103 2085 2083 2080 2066 2062 2051 2049 2043 2038 2031 2028 2019 2014 2007 2006 1993 1984 1984 1982 1981 1975 1971 1955 1954 1948 1940 1939 1933 1929 1927 1926 1925 1911 1910 1905 1905 1905 1905 1899 1889 1885 1882 1879 1877 1877 1876 1875 1870 1863 1858 1858 1857 1854 1854 1854 1852 1848 1848 1839 1837 1834 1831 1831 1831 1831 1831 1828 1828 1828 1828 1830 1830 1824 1824 1824 1824 1824 1824 1825 1825 1827 1827 1827 1823 1820 1820 1815 1815 1817 1819 1818 1819 1819 1819 1823 1828 1823 1835 1835 1835 1835 1835 1825 1824 1820 1769 1681 1602 1542 1485 1438 1438 1438 1440 1443 1443 1446 1448 1449 1446 1449 1453 1449 1453 1458 1458 1458 1458 1468 1469 1471 1476 1476 1477 1477 1483 1485 1489 1488 1489 1490 1491 1496 1500 1505 1514 1511 1517 1522 1517 1525 1527 1541 1546 1549 1550 1553 1557 1561 1562 1565 1577 1578 1599 1602 1608 1610 1610 1619 1620 1630 1633 1637 1650 1657 1662 1667 1671 1678 1693 1695 1697 1707 1716 1716 1716 1709 1699 1690 1673 1656 1647 1631 1604 1604 1584 1583 1577 1564 1562 1562 1559 1558 1501 1490 1474 1468 1468 1455 1439 1436 1434 1425 1403 1396 1386 1386 1386 1379 1358 1349 1342 1341 1333 1316 1309 1300 1294 1292 1276 1271 1271 1271 1266 1266 1251 1250 1247 1241 1235 1223 1219 1208 1206 1198 1195 1189 1179 1179 1177 1175 1160 1160 1159 1156 1156 1156 1154 1143 1142 1137 1134 1120 1119 1118 1115 1110 1109 1109 1109 1099 1092 1088 1088 1088 1083 1083 1080 1074 1072 993 980 978 976 967 965 965 963 954 949 947 941 941 937 941 941 936 932 926 920 913 913 910 908 908 902 902 902 898 892 883 879 879 874 874 874 867 864 862 861 861 859 852 758 378 371 371 372 378 372 372 369 368 368 369 460 601 634 634 644 645 645 645 648 650 650 650 648 646 645 645 626 615 611 611 615 620 620 620 457 445 428 293 257 257 256 257 257 244 244 252 252 341 359 375 375 403 403 403 382 189 118 114 103 103 101 103 98 98 98 98 88 85 78 76 75 71 70 69 68 67 66 64 60 64 64 58 58 49 49 46 46 50 50 50 50 48 48 43 44 44 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 31 34 33 31 31 33 32 32 32 33 36 37 37 39 39 39 39 39 39 39 39 39 39 40 40 40 40 44 44 45 46 50 50 50 51 57 58 58 60 60 60 60 61 60 60 61 59 59 69 78 97 108 112 121 136 149 147 147 147 147 147 162 187 0 0 0 0 0 0 0 0 0 1540 1517 1496 1496 1517 0 0 0 0 0 0 0 0 1473 1472 1469 1466 1449 1448 1432 1356 1356 1356 1397 1405 1408 1405 1405 1385 1337 1322 1319 1316 1312 1311 1304 1300 1304 1298 1298 1298 1293 1288 1282 1282 1288 1295 1299 1299 1299 1299 1299 1299 1303 1303 1307 1311 1315 1314 1314 1323 1323 4220 5281 5286 5286 5310 5318 5337 5354 5355 5359 5377 5391 5395 5408 0 0 0 0 0 0 0 7 0 7 0 0 0 4378 4320 4257 4184 4124 4076 4023 4003 3936 3889 3854 3819 3756 3723 3673 3631 3615 3574 3530 3502 3475 3427 3392 3364 3343 3300 3273 3247 3209 3187 3153 3138 3107 3078 3049 3021 2999 2972 2945 2926 2914 2885 2863 2830 2820 2798 2790 2750 2733 2712 2694 2682 2668 2636 2627 2617 2588 2564 2542 2533 2521 2501 2488 2475 2463 2451 2440 2412 2408 2397 2381 2368 2367 2356 2338 2327 2314 2298 2288 2278 2272 2258 2242 2225 2221 2214 2200 2196 2181 2179 2175 2154 2151 2151 2129 2126 2120 2115 2108 2090 2087 2087 2082 2063 2060 2054 2051 2039 2037 2030 2019 2019 2012 2012 2006 2001 1991 1981 1980 1975 1971 1968 1960 1959 1959 1946 1941 1938 1931 1924 1923 1921 1918 1917 1914 1909 1907 1905 1898 1898 1894 1889 1889 1885 1880 1874 1873 1871 1865 1863 1863 1863 1849 1849 1849 1849 1849 1849 1847 1840 1839 1836 1835 1833 1833 1833 1831 1829 1829 1829 1829 1829 1821 1821 1821 1825 1825 1825 1825 1820 1819 1820 1820 1819 1819 1820 1818 1820 1823 1823 1820 1820 1819 1819 1819 1820 1827 1827 1827 1824 1823 1823 1824 1824 1822 1765 1683 1603 1534 1485 1441 1436 1433 1433 1431 1429 1429 1444 1443 1443 1444 1459 1459 1459 1459 1459 1458 1458 1467 1467 1472 1476 1477 1477 1477 1486 1486 1486 1484 1484 1484 1492 1493 1508 1508 1513 1513 1514 1519 1522 1525 1529 1532 1538 1544 1547 1553 1563 1565 1566 1575 1577 1582 1594 1599 1606 1612 1617 1624 1627 1630 1640 1643 1647 1647 1659 1660 1671 1683 1684 1695 1703 1711 1712 1714 1714 1714 1698 1691 1678 1663 1640 1634 1604 1604 1583 1582 1568 1566 1560 1560 1537 1536 1502 1487 1478 1474 1464 1459 1432 1432 1427 1427 1414 1394 1389 1389 1385 1381 1353 1347 1344 1333 1329 1319 1310 1301 1289 1288 1277 1268 1267 1265 1265 1265 1260 1243 1243 1240 1232 1231 1229 1216 1214 1211 1208 1202 1191 1185 1183 1180 1180 1174 1172 1157 1149 1145 1145 1145 1145 1140 1138 1136 1124 1118 1115 1115 1115 1115 1115 1103 1102 1097 1094 1090 1086 1083 1081 1080 1077 999 990 981 975 968 968 967 966 958 947 944 943 943 943 943 939 934 923 922 917 915 914 912 912 909 908 908 895 889 887 885 885 884 873 873 875 872 871 871 864 861 860 854 743 382 381 375 375 375 380 380 380 371 371 371 458 600 640 646 647 648 646 646 645 645 644 645 645 647 647 647 630 612 610 610 610 624 624 624 459 448 437 274 264 264 249 255 255 254 249 254 254 282 340 361 381 408 408 408 364 194 133 112 103 99 99 99 103 99 99 98 87 83 74 74 73 74 74 68 67 67 67 67 67 67 66 66 61 59 58 58 58 58 55 45 45 34 34 40 40 40 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 33 33 33 29 29 30 30 31 32 32 32 32 34 34 34 34 36 34 30 30 37 37 45 45 45 46 46 41 46 50 50 50 51 51 51 51 58 58 58 58 58 60 63 63 60 63 64 66 68 75 76 103 105 116 129 129 130 133 139 139 152 169 196 0 0 0 0 0 0 7 0 1525 1525 1494 1494 1494 1503 0 0 0 0 0 0 0 0 7 1476 1474 1466 1456 1437 1428 1346 1346 1346 1376 1399 1399 1399 1394 1386 1349 1345 1323 1315 1309 1309 1309 1306 1306 1302 1301 1293 1291 1289 1289 1289 1289 1291 1296 1296 1296 1297 1297 1303 1303 1303 1303 1303 1308 1308 1310 1310 1320 4203 5269 5290 5290 5292 5303 5336 5349 5353 5357 5379 5385 5389 5415 0 0 0 0 0 0 0 7 0 0 0 0 0 4386 4305 4254 4186 4139 4093 4023 3959 3934 3876 3850 3809 3761 3727 3677 3650 3595 3563 3535 3491 3464 3443 3386 3365 3344 3295 3274 3244 3212 3190 3154 3139 3103 3071 3044 3020 2999 2975 2946 2921 2907 2885 2863 2845 2813 2793 2790 2756 2731 2715 2691 2679 2668 2648 2623 2606 2584 2576 2548 2526 2520 2503 2487 2479 2465 2460 2427 2423 2417 2405 2388 2365 2363 2346 2346 2311 2308 2301 2290 2278 2272 2259 2243 2231 2222 2220 2201 2195 2194 2180 2174 2160 2155 2144 2137 2125 2118 2115 2108 2095 2086 2085 2075 2069 2067 2052 2050 2043 2039 2032 2030 2021 2018 2010 1999 1997 1997 1986 1986 1977 1968 1964 1951 1949 1947 1939 1939 1938 1934 1933 1924 1919 1918 1914 1906 1906 1902 1896 1894 1890 1887 1884 1879 1877 1876 1876 1873 1873 1868 1865 1865 1865 1858 1857 1857 1846 1846 1840 1840 1840 1839 1839 1835 1835 1836 1835 1835 1834 1827 1824 1824 1829 1829 1829 1829 1829 1826 1825 1824 1822 1822 1824 1826 1826 1826 1819 1819 1819 1825 1826 1826 1826 1823 1823 1823 1827 1831 1831 1831 1832 1831 1835 1835 1831 1826 1769 1691 1598 1529 1490 1437 1433 1433 1429 1433 1433 1431 1431 1442 1440 1452 1452 1452 1452 1459 1459 1460 1460 1468 1470 1472 1473 1473 1474 1480 1480 1479 1480 1480 1487 1487 1489 1495 1508 1517 1517 1520 1517 1522 1523 1525 1525 1527 1541 1542 1547 1549 1552 1561 1566 1573 1576 1586 1587 1592 1609 1610 1613 1621 1624 1629 1637 1639 1648 1649 1651 1656 1660 1671 1686 1691 1696 1700 1708 1719 1719 1719 1703 1686 1679 1653 1653 1633 1603 1603 1585 1584 1575 1565 1563 1563 1556 1550 1508 1484 1478 1475 1460 1452 1436 1432 1427 1424 1399 1393 1390 1390 1385 1372 1356 1348 1343 1337 1324 1316 1316 1314 1300 1299 1284 1274 1266 1260 1260 1260 1260 1251 1243 1236 1230 1219 1218 1217 1211 1204 1195 1195 1192 1191 1184 1181 1173 1169 1159 1159 1153 1150 1150 1150 1145 1140 1140 1132 1132 1128 1125 1119 1108 1106 1100 1100 1091 1089 1088 1085 1079 1079 1079 1068 1067 997 985 985 971 969 969 969 968 961 947 947 945 943 939 938 937 937 934 927 926 918 912 907 901 901 901 900 892 892 887 883 883 880 877 876 875 872 865 856 856 855 855 855 849 372 368 367 367 368 377 377 381 381 381 381 471 598 630 644 644 644 647 647 647 647 647 647 647 647 645 641 634 619 608 608 617 617 617 617 464 445 429 289 256 256 247 255 255 247 244 244 244 269 336 357 396 417 417 396 383 196 122 112 107 105 105 105 101 101 95 93 85 81 81 81 81 76 76 72 71 65 63 62 62 62 62 59 58 58 49 49 49 52 52 52 52 51 51 46 46 45 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 29 31 30 31 35 34 35 35 34 34 34 30 31 34 34 34 40 40 40 40 39 36 35 35 35 41 46 46 46 52 46 46 50 50 50 53 54 54 57 58 63 63 63 59 59 59 67 67 69 69 76 95 105 122 128 129 145 145 148 148 151 155 182 0 0 0 0 0 0 7 0 1518 1518 1509 1509 1509 1514 0 0 0 0 0 0 0 0 0 1481 1472 1467 1441 1440 1433 1357 1357 1357 1390 1394 1415 1415 1390 1386 1366 1346 1311 1305 1305 1305 1305 1303 1303 1303 1296 1295 1289 1288 1288 1288 1288 1290 1292 1292 1296 1299 1299 1299 1300 1300 1303 1305 1314 1314 1315 1316 1316 4210 5283 5288 5288 5297 5329 5338 5345 5361 5376 5378 5382 5382 5392 5393 0 0 0 0 0 0 0 0 0 0 0 0 4365 4315 4244 4197 4131 4077 4034 3966 3934 3876 3845 3815 3763 3725 3675 3637 3607 3562 3531 3494 3471 3433 3392 3359 3332 3305 3276 3252 3216 3202 3161 3119 3096 3072 3047 3021 3002 2966 2937 2923 2901 2885 2851 2843 2823 2808 2776 2746 2740 2714 2697 2672 2657 2632 2620 2616 2578 2565 2546 2541 2530 2505 2492 2492 2481 2472 2429 2417 2410 2399 2382 2366 2357 2348 2340 2323 2319 2290 2288 2287 2258 2255 2251 2234 2222 2217 2206 2198 2193 2175 2158 2156 2151 2142 2139 2131 2120 2119 2112 2104 2085 2071 2070 2067 2062 2056 2042 2041 2040 2035 2024 2023 2008 2007 2005 1994 1987 1982 1979 1974 1969 1967 1958 1952 1943 1942 1942 1939 1938 1932 1922 1915 1914 1912 1912 1907 1902 1901 1898 1894 1891 1890 1880 1880 1870 1873 1880 1873 1863 1864 1856 1853 1853 1853 1853 1851 1851 1851 1851 1851 1844 1841 1837 1837 1835 1829 1829 1829 1829 1827 1827 1827 1827 1822 1826 1826 1826 1826 1826 1816 1816 1816 1828 1828 1828 1828 1824 1823 1824 1822 1824 1822 1824 1822 1824 1824 1826 1828 1828 1828 1826 1826 1826 1833 1833 1833 1681 1597 1543 1481 1446 1442 1442 1446 1446 1442 1444 1440 1440 1444 1444 1445 1453 1453 1453 1451 1451 1451 1454 1464 1471 1476 1479 1479 1480 1481 1485 1490 1490 1495 1490 1490 1500 1510 1512 1515 1515 1519 1523 1525 1530 1536 1540 1543 1548 1548 1551 1556 1558 1563 1569 1577 1579 1600 1600 1600 1600 1600 1622 1632 1633 1638 1645 1648 1648 1656 1659 1667 1673 1688 1690 1695 1701 1702 1710 1710 1710 1704 1698 1679 1649 1649 1639 1607 1607 1590 1584 1570 1563 1553 1550 1546 1527 1499 1487 1474 1470 1463 1457 1427 1424 1424 1419 1419 1392 1382 1382 1381 1381 1348 1348 1347 1343 1327 1318 1309 1303 1300 1298 1272 1270 1269 1265 1264 1258 1258 1252 1243 1240 1235 1220 1219 1218 1210 1209 1200 1197 1196 1189 1181 1176 1175 1166 1161 1158 1149 1149 1145 1145 1142 1133 1133 1133 1120 1120 1115 1115 1115 1115 1106 1091 1091 1090 1090 1086 1086 1073 1073 1073 1073 988 978 974 973 968 966 966 964 955 952 946 945 945 945 940 936 936 927 927 924 920 920 913 901 900 900 899 899 892 889 886 875 874 873 873 869 868 866 858 857 855 851 843 735 384 375 374 374 375 375 380 380 375 375 381 467 605 632 638 646 640 640 646 646 646 646 646 646 640 640 639 639 614 612 612 612 614 612 612 461 460 422 286 260 260 249 258 258 248 242 248 248 267 352 364 384 399 399 399 367 197 127 114 111 105 101 98 98 98 98 98 94 84 82 76 76 76 76 76 73 67 67 67 66 63 63 58 57 49 56 56 50 56 56 50 46 38 38 38 37 35 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 39 35 34 34 34 34 28 26 26 26 29 32 34 36 36 36 35 33 33 35 35 40 41 41 41 41 43 43 43 49 49 50 50 52 56 56 56 61 61 61 61 62 62 63 63 68 68 68 72 77 86 99 103 116 117 124 143 143 143 143 146 161 182 0 0 0 0 0 0 15 15 15 1497 1497 1497 1504 1514 0 0 0 0 0 0 0 0 7 1475 1463 1451 1449 1443 1430 1360 1360 1360 1369 1389 1411 7 1389 1363 1356 1353 1325 1318 1310 1307 1309 1309 1298 1298 1299 1294 1294 1290 1288 1288 1284 1284 1298 1301 1298 1301 1304 1304 1304 1308 1309 1312 1315 1315 1315 1315 1317 4203 5281 5295 5295 5307 5325 5337 5344 5361 5370 5375 5391 5391 5398 5398 0 0 0 0 0 0 0 0 0 0 0 0 4354 4312 4268 4175 4143 4068 4023 3988 3940 3902 3843 3810 3769 3717 3683 3624 3605 3567 3550 3498 3466 3421 3396 3348 3329 3299 3274 3237 3215 3183 3155 3133 3090 3085 3059 3023 2994 2970 2951 2928 2905 2882 2859 2835 2817 2804 2770 2754 2737 2718 2689 2673 2663 2634 2625 2613 2581 2561 2547 2539 2511 2498 2496 2479 2466 2457 2434 2426 2407 2404 2393 2373 2358 2340 2337 2324 2313 2301 2277 2276 2273 2261 2249 2229 2221 2207 2207 2198 2183 2181 2166 2160 2144 2142 2138 2128 2128 2114 2111 2111 2104 2092 2075 2063 2058 2055 2054 2049 2032 2031 2029 2023 2018 2010 2010 1998 1984 1984 1983 1980 1968 1967 1963 1961 1950 1947 1941 1938 1934 1933 1929 1923 1922 1921 1916 1908 1903 1898 1896 1896 1893 1886 1885 1883 1881 1880 1878 1869 1868 1868 1868 1865 1861 1855 1852 1852 1849 1849 1849 1841 1843 1843 1839 1839 1839 1826 1826 1826 1826 1828 1828 1825 1819 1825 1820 1825 1825 1825 1825 1825 1822 1822 1825 1822 1822 1819 1819 1819 1819 1821 1821 1817 1821 1819 1819 1821 1824 1826 1826 1831 1831 1831 1831 1831 1831 1776 1686 1597 1536 1492 1436 1436 1436 1436 1440 1442 1442 1442 1442 1445 1448 1449 1450 1450 1450 1450 1455 1455 1467 1469 1470 1473 1473 1475 1475 1478 1482 1488 1488 1489 1491 1494 1497 1502 1514 1520 1514 1520 1520 1523 1529 1530 1539 1541 1548 1548 1549 1551 1558 1560 1568 1576 1581 1584 1596 1598 1609 1609 1610 1622 1626 1636 1643 1644 1652 1657 1663 1666 1680 1684 1688 1692 1695 1715 1715 1715 1711 1708 1692 1663 1659 1644 1632 1607 1607 1589 1585 1569 1568 1560 1560 1555 1553 1507 1487 1477 1466 1461 1448 1441 1429 1417 1415 1412 1388 1383 1383 1381 1376 1355 1351 1346 1334 1327 1321 1302 1302 1298 1293 1278 1274 1266 1264 1260 1256 1256 1254 1247 1243 1236 1218 1215 1213 1204 1203 1202 1192 1184 1184 1183 1181 1180 1162 1161 1154 1151 1151 1144 1144 1136 1139 1135 1135 1126 1123 1113 1109 1107 1107 1106 1106 1100 1098 1089 1089 1072 1071 1070 1065 1063 983 980 980 980 970 970 969 967 966 954 950 949 949 939 933 931 931 930 930 920 917 917 908 902 902 900 896 895 895 891 888 881 878 879 877 877 869 868 867 859 859 855 848 751 376 375 366 366 375 377 377 377 376 376 376 465 600 642 642 648 648 647 648 648 647 640 640 639 638 638 635 624 611 606 606 606 622 622 622 461 445 427 292 256 256 255 256 256 249 247 247 247 272 344 371 377 394 394 394 377 191 114 112 101 101 100 101 101 100 98 98 93 90 81 81 67 67 67 67 67 59 59 59 65 65 65 64 57 54 54 52 54 54 54 54 54 44 44 44 44 44 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 29 29 29 27 27 27 27 27 29 34 31 31 34 34 34 34 37 37 38 40 40 40 38 36 36 36 36 41 47 47 43 43 48 47 53 53 53 53 53 58 60 60 61 67 72 72 67 64 64 64 67 110 114 124 146 140 146 148 152 152 154 163 184 0 0 0 0 0 0 7 0 1510 1510 1503 1499 1499 1499 0 0 0 0 0 0 0 0 0 1475 1466 1464 1449 1428 1423 1363 1363 1363 1382 1388 1392 1392 1391 1391 1378 1328 1316 1314 1308 1306 1298 1298 1298 1296 1295 1294 1292 1292 1289 1288 1288 1288 1288 1288 1292 1292 1292 1300 1301 1304 1305 1309 1309 1315 1315 1315 1315 4219 5273 5278 5278 5296 5321 5333 5335 5362 5362 5383 5388 5390 5409 0 0 0 0 0 7 0 7 0 7 0 0 0 7 4385 4255 4192 4142 4092 4029 3971 3923 3898 3832 3813 3754 3728 3680 3646 3602 3557 3526 3488 3473 3433 3396 3348 3331 3295 3271 3250 3208 3191 3156 3133 3104 3078 3047 3027 2999 2967 2936 2930 2910 2886 2859 2836 2821 2800 2777 2754 2750 2711 2689 2674 2648 2636 2631 2611 2582 2574 2552 2538 2515 2503 2486 2480 2472 2457 2446 2427 2409 2391 2391 2365 2362 2343 2336 2320 2314 2304 2298 2277 2265 2257 2243 2234 2227 2216 2209 2206 2180 2170 2162 2161 2150 2144 2133 2129 2129 2113 2104 2100 2095 2078 2076 2073 2066 2061 2055 2038 2036 2031 2030 2018 2015 2012 1997 1997 1995 1987 1980 1977 1972 1968 1961 1958 1955 1950 1935 1935 1934 1927 1926 1925 1925 1923 1917 1902 1901 1901 1899 1892 1892 1884 1884 1884 1884 1880 1875 1869 1866 1865 1864 1861 1860 1860 1859 1858 1855 1850 1845 1842 1836 1835 1835 1832 1835 1834 1834 1832 1832 1827 1825 1825 1825 1829 1830 1830 1829 1830 1830 1823 1823 1830 1823 1823 1820 1820 1820 1822 1822 1822 1823 1824 1824 1824 1825 1825 1831 1831 1831 1831 1831 1825 1831 1833 1825 1825 1681 1597 1541 1477 1442 1436 1434 1434 1434 1440 1440 1440 1440 1443 1445 1455 1455 1455 1452 1452 1452 1461 1462 1462 1462 1462 1476 1482 1482 1486 1482 1486 1486 1490 1490 1490 1495 1502 1514 1519 1519 1522 1525 1525 1528 1533 1545 1546 1548 1554 1554 1555 1556 1565 1571 1571 1593 1593 1597 1598 1619 1621 1621 1621 1624 1634 1640 1645 1653 1655 1657 1667 1668 1685 1694 1700 1707 1711 1712 1712 1712 1700 1696 1678 1654 1641 1631 1609 1609 1590 1574 1571 1567 1563 1563 1541 1541 1497 1493 1493 1473 1472 1452 1439 1434 1432 1425 1410 1398 1390 1390 1381 1375 1355 1352 1343 1337 1321 1316 1313 1301 1300 1294 1274 1272 1263 1255 1255 1255 1255 1254 1242 1236 1229 1229 1215 1210 1210 1210 1208 1200 1200 1193 1182 1175 1167 1167 1165 1164 1152 1147 1143 1138 1138 1138 1134 1132 1131 1121 1121 1119 1119 1111 1106 1105 1094 1090 1088 1086 1071 1078 1071 1069 1069 987 986 982 980 973 971 971 971 964 950 950 944 943 943 943 940 938 938 924 921 919 914 910 910 906 896 896 896 896 896 880 879 876 878 873 872 872 868 865 862 859 854 850 746 375 375 372 372 372 372 378 378 372 378 378 469 602 637 643 643 649 649 649 649 649 647 646 646 646 643 643 639 617 600 600 600 621 621 621 465 457 427 284 261 261 256 249 251 250 249 250 251 274 345 353 388 395 395 395 376 184 119 106 106 106 104 103 103 103 95 92 88 87 87 79 82 79 75 75 70 67 66 66 64 64 64 62 53 53 52 52 54 55 54 54 52 44 44 43 43 44 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 30 30 28 25 25 25 23 23 28 32 34 34 34 35 36 40 40 41 41 41 41 39 36 36 36 44 48 48 48 48 48 50 50 52 52 52 56 56 59 60 60 61 63 66 66 66 68 64 64 68 87 97 112 112 112 128 137 142 146 149 150 165 209 0 0 0 0 0 0 7 0 1507 1507 1503 1502 1502 1503 0 0 0 0 0 0 0 0 0 0 1481 1447 1445 1440 1423 1346 1346 1346 1383 1390 1390 1395 1390 1380 1370 1340 1332 1311 1305 1305 1303 1300 1300 1292 1292 1292 1291 1291 1291 1291 1293 1293 1293 1293 1298 1298 1298 1298 1298 1315 1315 1312 1312 1315 1312 1315 1320 4212 5292 5292 5292 5310 5312 5336 5349 5351 5365 5383 5390 5403 5406 0 0 0 0 0 0 0 0 0 0 0 0 0 4375 4375 4319 4269 4151 4078 4023 3986 3934 3879 3852 3808 3747 3706 3661 3638 3609 3563 3528 3501 3472 3431 3397 3361 3334 3296 3272 3251 3219 3194 3164 3133 3104 3081 3053 3029 2983 2964 2936 2924 2904 2891 2860 2828 2817 2800 2767 2755 2725 2713 2701 2682 2660 2637 2627 2612 2589 2565 2543 2539 2521 2507 2482 2475 2471 2452 2439 2422 2407 2401 2389 2368 2366 2341 2332 2331 2315 2296 2290 2270 2265 2259 2240 2233 2222 2217 2206 2193 2181 2178 2173 2165 2155 2142 2131 2130 2127 2115 2112 2100 2094 2081 2077 2073 2063 2055 2055 2044 2038 2028 2019 2014 2013 2007 1998 1995 1993 1985 1974 1974 1972 1968 1953 1953 1952 1942 1942 1939 1935 1931 1930 1930 1918 1917 1904 1900 1900 1899 1895 1895 1887 1885 1878 1878 1876 1871 1869 1867 1863 1859 1857 1856 1856 1854 1850 1850 1846 1843 1843 1839 1836 1835 1832 1832 1832 1832 1833 1833 1832 1828 1828 1828 1828 1829 1829 1826 1824 1824 1824 1824 1824 1819 1823 1823 1822 1822 1823 1822 1821 1821 1823 1823 1823 1823 1825 1823 1826 1828 1827 1828 1828 1827 1827 1823 1817 1773 1680 1594 1542 1482 1436 1435 1430 1435 1435 1435 1438 1438 1435 1435 1443 1444 1444 1453 1456 1456 1456 1457 1457 1458 1462 1464 1467 1478 1479 1481 1484 1486 1487 1489 1490 1498 1502 1510 1515 1517 1517 1521 1523 1526 1530 1532 1543 1546 1548 1548 1550 1550 1563 1565 1570 1577 1589 1592 1593 1594 1594 1606 1618 1620 1626 1626 1635 1643 1656 1658 1660 1671 1675 1685 1695 1697 1702 1704 1714 1714 1714 1704 1687 1670 1665 1649 1634 1607 1607 1592 1580 1576 1568 1557 1551 1547 1534 1513 1481 1477 1474 1460 1450 1440 1428 1425 1418 1416 1391 1385 1385 1381 1376 1352 1350 1346 1334 1329 1317 1314 1296 1294 1292 1282 1274 1274 1264 1264 1260 1260 1253 1244 1240 1240 1227 1224 1219 1218 1211 1211 1209 1200 1191 1174 1173 1173 1172 1172 1165 1154 1148 1145 1143 1137 1133 1133 1131 1129 1116 1115 1115 1106 1106 1101 1102 1101 1101 1097 1086 1086 1086 1086 1082 1072 988 984 984 980 971 971 968 968 952 947 947 946 944 941 941 939 932 930 924 922 922 922 916 913 907 901 900 896 896 890 887 886 872 872 872 869 869 867 862 862 862 862 862 737 379 377 362 362 362 372 372 372 371 371 371 469 600 636 646 646 649 652 649 647 647 646 646 646 644 644 642 635 612 608 608 612 621 621 621 458 450 434 284 265 265 256 261 261 249 249 250 250 269 333 358 389 395 395 395 364 174 132 118 118 104 102 102 104 102 102 88 87 87 78 75 75 75 75 75 69 69 68 67 67 63 63 60 54 52 52 52 52 52 48 48 48 41 41 34 34 40 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19",
                "19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 27 28 29 28 29 29 29 28 29 28 28 34 34 29 34 32 29 32 34 34 37 40 40 40 40 39 39 45 48 48 48 48 52 52 52 54 55 57 57 59 59 59 62 62 65 65 66 67 68 72 76 105 111 117 127 127 152 154 154 158 158 170 172 0 0 0 0 0 0 7 0 1515 1515 1506 1502 1502 1502 0 0 0 0 0 0 0 0 0 1476 1468 1458 1449 1433 1424 1359 1359 1359 1382 1403 1406 1406 1403 1363 1346 1344 1339 1320 1319 1304 1300 1296 1296 1296 1296 1294 1292 1292 1292 1292 1292 1292 1298 1300 1303 1303 1302 1303 1303 1304 1304 1304 1309 1313 1313 1317 1322 4207 5274 5300 5300 5308 5317 5321 5339 5346 5352 5365 5377 5377 5394 5394 0 0 0 0 0 0 0 0 0 0 0 0 4376 4289 4258 4196 4142 4076 4022 3989 3914 3885 3857 3801 3763 3716 3663 3640 3606 3567 3539 3492 3464 3426 3397 3351 3330 3299 3267 3246 3213 3183 3153 3135 3101 3079 3054 3026 3003 2971 2938 2915 2902 2895 2871 2838 2809 2789 2773 2754 2741 2709 2701 2672 2661 2646 2629 2602 2580 2565 2555 2542 2522 2513 2484 2479 2466 2444 2433 2424 2401 2393 2393 2363 2360 2346 2343 2332 2293 2289 2282 2273 2265 2253 2251 2239 2231 2217 2205 2199 2189 2185 2166 2153 2150 2146 2133 2126 2116 2111 2106 2094 2094 2078 2077 2076 2069 2053 2049 2041 2029 2027 2023 2018 2014 2014 2001 1994 1989 1982 1979 1975 1973 1965 1961 1956 1956 1945 1942 1942 1941 1928 1928 1926 1922 1914 1912 1911 1904 1898 1896 1894 1887 1887 1887 1887 1878 1877 1876 1874 1873 1861 1861 1861 1861 1856 1854 1854 1852 1851 1849 1849 1846 1842 1844 1841 1834 1834 1829 1829 1829 1828 1828 1828 1825 1822 1822 1825 1825 1824 1826 1824 1824 1824 1824 1820 1820 1820 1819 1820 1820 1821 1821 1821 1821 1821 1821 1821 1826 1822 1826 1828 1826 1826 1827 1827 1815 1766 1673 1596 1534 1482 1449 1443 1438 1438 1443 1443 1440 1446 1448 1447 1447 1447 1447 1447 1462 1462 1462 1454 1454 1454 1463 1471 1473 1473 1473 1474 1484 1489 1489 1489 1489 1489 1500 1500 1509 1512 1512 1516 1526 1526 1530 1531 1547 1550 1551 1556 1556 1556 1558 1562 1576 1584 1585 1588 1589 1607 1608 1620 1626 1626 1633 1634 1639 1648 1655 1662 1669 1670 1677 1694 1695 1699 1703 1708 1717 1717 1717 1699 1692 1678 1657 1656 1641 1612 1612 1588 1587 1580 1567 1557 1554 1547 1522 1514 1482 1475 1470 1459 1457 1427 1424 1424 1424 1409 1384 1383 1383 1377 1377 1354 1354 1339 1339 1333 1324 1304 1302 1297 1296 1285 1279 1268 1264 1260 1256 1253 1243 1243 1240 1227 1220 1220 1218 1218 1204 1203 1200 1188 1187 1185 1182 1176 1175 1168 1151 1151 1150 1141 1141 1141 1138 1133 1125 1120 1120 1112 1111 1109 1109 1096 1096 1092 1094 1094 1092 1088 1086 1082 1079 1070 984 984 983 983 971 969 969 968 957 956 948 947 947 944 939 934 933 932 931 928 925 906 903 900 903 903 899 892 889 889 883 882 880 880 877 872 870 866 861 860 859 859 857 846 379 369 369 369 370 371 371 371 369 369 369 468 598 636 643 643 647 644 647 644 644 643 638 637 638 638 636 636 604 603 603 604 621 621 621 458 445 421 290 258 258 254 258 258 254 250 250 250 281 341 360 397 403 403 397 375 187 120 115 110 107 107 98 98 98 98 95 95 78 78 74 82 74 74 70 64 63 63 63 65 65 65 59 58 56 56 55 55 52 52 46 46 46 46 43 43 40 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19"
            };
        }

        private DispatcherTimer TimerSampleData;

        private void CreateSampleDats()
        {
            this.InitSampleDatas();

            if (this.TimerSampleData == null)
            {
                this.TimerSampleData = new DispatcherTimer();
                this.TimerSampleData.Interval = TimeSpan.FromMilliseconds(100);
                this.TimerSampleData.Tick += TimerSampleData_Tick;
                this.TimerSampleData.Start();
            }
        }

        private void FreeTimerSampleDatas()
        {
            if (this.TimerSampleData != null)
            {
                this.TimerSampleData.Stop();
                this.TimerSampleData.Tick -= TimerSampleData_Tick;
                this.TimerSampleData = null;
            }
        }

        private void TimerSampleData_Tick(object sender, EventArgs e)
        {
            this.Index++;
            if (this.Index >= this.SampleDatas.Count)
                this.Index = 0;
            if(OnSensorDataReceived != null)
                OnSensorDataReceived("");
            if (OnSensorDataDecoded != null)
            {
                string sDatas = this.SampleDatas[this.Index];
                List<double> ltDistance = this.ConvertToList(sDatas);
                if (OnSensorDataDecoded != null)
                {
                    SensorData oData = new SensorData();
                    oData.DecodeStr = sDatas;
                    oData.Distances = ltDistance;
                    OnSensorDataDecoded(oData);
                }
            }
        }

        private List<double> ConvertToList(string sValue)
        {
            List<double> ltDatas = new List<double>();
            string[] arrValue = sValue.Split(new char[] { ' ' }, StringSplitOptions.None);
            for (int i = 0; i < arrValue.Length; i++)
            {
                ltDatas.Add(Convert.ToDouble(arrValue[i]));
            }
            return ltDatas;
        }

        #endregion

        #region Sample Datas From Files

        private void InitMetaDatas()
        {
            this.SampleDatas = new List<string>();
            List<string> ltFile = FolderHelper.GetAllFileFullName(GlobalVar.DATAS_PATH); // 文件列表
            for (int i = 0; i < ltFile.Count; i++)
            {
                string sMetaFile = ltFile[i];
                this.SampleDatas.Add(this.ReadFileContents(sMetaFile));
            }
        }

        private string ReadFileContents(string sFile)
        {
            FileStream fileStream = new FileStream(sFile, FileMode.Open, FileAccess.Read);
            StreamReader oReader = new StreamReader(fileStream);
            string sContent = oReader.ReadToEnd();
            oReader.Close();
            fileStream.Close();
            return sContent;
        }

        private DispatcherTimer TimerSampleData_Meta;

        private void CreateSampleTimer_MetaDatas()
        {
            this.InitMetaDatas();

            if (this.TimerSampleData_Meta == null)
            {
                this.TimerSampleData_Meta = new DispatcherTimer();
                this.TimerSampleData_Meta.Interval = TimeSpan.FromMilliseconds(100);
                this.TimerSampleData_Meta.Tick += TimerSampleData_Meta_Tick;
                this.TimerSampleData_Meta.Start();
            }
        }

        private void FreeTimerSampleDatas_Meta()
        {
            if (this.TimerSampleData_Meta != null)
            {
                this.TimerSampleData_Meta.Stop();
                this.TimerSampleData_Meta.Tick -= TimerSampleData_Meta_Tick;
                this.TimerSampleData_Meta = null;
            }
        }

        private void TimerSampleData_Meta_Tick(object sender, EventArgs e)
        {
            this.Index++;
            if (this.Index >= this.SampleDatas.Count)
                this.Index = 0;

            string sSensorData = this.SampleDatas[this.Index];
            App.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
            {
                if (OnSensorDataReceived != null)
                    OnSensorDataReceived(sSensorData);
            }));
            double dTimeStamp = 0;
            List<double> ltDistances = new List<double>();
            string sDecode = UrgService.TestDecodeSensorDatas(sSensorData, ref dTimeStamp, ref ltDistances); // 解析
            if (!String.IsNullOrEmpty(sDecode))
            {
                App.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
                {
                    if (OnSensorDataDecoded != null)
                    {
                        SensorData oData = new SensorData();
                        oData.Index = this.Index;
                        oData.DecodeStr = sDecode;
                        oData.TimeStamp = dTimeStamp;
                        oData.Distances = ltDistances;
                        OnSensorDataDecoded(oData);
                    }
                }));
            }
        }

        #endregion

        public UrgSensor()
        {
            this.InitSerialPort();
            EventService.AppShutDowningEvent += EventService_AppShutDowningEvent;
        }

        private void EventService_AppShutDowningEvent()
        {
            EventService.AppShutDowningEvent -= EventService_AppShutDowningEvent;
            this.FreeSerialPort();
            this.FreeTimerSampleDatas();
        }

        private SerialPort RadarPort;
        private string PortName = "COM4";
        private int BaudRate = 115200;

        private void CreateBetaDatas()
        {
            App.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() => {
                if (this.IsUseSampleDatas_FromDistances)
                    this.CreateSampleDats();
                else if (this.IsUseSampleDatas_FromFiles)
                    this.CreateSampleTimer_MetaDatas();
            }));
        }

        private void InitSerialPort()
        {
            Task.Run(() => {
                try
                {
                    if (!IsForceUseMetaDatas)
                    {
                        this.RadarPort = new SerialPort(this.PortName, this.BaudRate);
                        this.RadarPort.NewLine = "\n\n";
                        this.RadarPort.Open();
                        this.RadarPort.Write("SCIP2.0\n");
                        this.RadarPort.ReadLine();
                        this.RadarPort.Write(UrgService.SCIP_MD(0, 760));
                        this.RadarPort.ReadLine();
                        this.RadarPort.DataReceived += RadarPort_DataReceived;
                    }
                    else
                        this.CreateBetaDatas();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    this.CreateBetaDatas();
                }
            });
        }

        private void FreeSerialPort()
        {
            try
            {
                if (this.RadarPort != null)
                {
                    this.RadarPort.Write("QT\n");
                    this.RadarPort.Close();
                    this.RadarPort = null;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error:" + ex.Message);
            }
        }

        private void RadarPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                SerialPort oSerialPort = sender as SerialPort;
                string sSensorData = oSerialPort.ReadLine();

                // 数据存储
                //string sFileName = GlobalVar.DATAS_PATH + FormatHelper.GetFormatFullTime() + ".meta";
                //AsynchUtils.AsynchExecuteFunc(App.Current.Dispatcher, () =>
                //{

                //    FileStream fileStream = new FileStream(sFileName, FileMode.Append, FileAccess.Write);
                //    StreamWriter streamWriter = new StreamWriter(fileStream);
                //    streamWriter.WriteLine(sSensorData);
                //    streamWriter.Flush();
                //    streamWriter.Close();
                //    fileStream.Close();
                //}, null);

                App.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
                {
                    if (OnSensorDataReceived != null)
                        OnSensorDataReceived(sSensorData);
                }));
                double dTimeStamp = 0;
                List<double> ltDistances = new List<double>();

                string sDecode = UrgService.TestDecodeSensorDatas(sSensorData, ref dTimeStamp, ref ltDistances);
                if (!String.IsNullOrEmpty(sDecode))
                {
                    App.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
                    {
                        if (OnSensorDataDecoded != null)
                        {
                            SensorData oData = new SensorData();
                            oData.DecodeStr = sDecode;
                            oData.TimeStamp = dTimeStamp;
                            oData.Distances = ltDistances;
                            OnSensorDataDecoded(oData);
                        }
                    }));
                }

                //bool bIsValid = UrgService.DecodeSensorDatas(sSensorData, ref lTimeStamp, ref ltDistances);
                //if (bIsValid)
                //{
                //    App.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() => {
                // 
                //
                //    }));
                //}
            }
            catch { }
        }

        public static UrgSensor RadarSensor;

        static UrgSensor()
        {
            Instance();
        }

        public static void Instance()
        {
            if (RadarSensor == null)
                RadarSensor = new UrgSensor();
        }

        public delegate void DataReceivedEventHandler(string sSensorData);

        public static event DataReceivedEventHandler OnSensorDataReceived;

        public delegate void SensorDataDecodedEventHandler(SensorData oSensorData);

        public static event SensorDataDecodedEventHandler OnSensorDataDecoded;
    }
 public class UrgService
    {
        public static string SCIP_MD(int start, int end, int grouping = 1, 
            int skips = 0, int scans = 0)
        {
            return "MD" + start.ToString("D4") + end.ToString("D4") 
                + grouping.ToString("D2") + skips.ToString("D1")
                + scans.ToString("D2") + "\n";
        }

        public static bool DecodeSensorDatas(string sContent, ref long lTimeStamp, 
            ref List<double> ltDistances)
        {
            string[] arrDatas = sContent.Split(new char[] { '\n' }, 
                StringSplitOptions.RemoveEmptyEntries);
            if (!arrDatas[0].StartsWith("MD"))
                return false;
            if (arrDatas[1].StartsWith("00") || arrDatas[1].StartsWith("99"))
            {
                lTimeStamp = UrgService.Decode(arrDatas[2], 4);
                UrgService.GetDistanceDatas(arrDatas, 3, ref ltDistances);
                return true;
            }
            else
                return false;
        }

        private static bool GetDistanceDatas(string[] arrDatas, int nStartIndex, ref List<double> ltDistances)
        {
            StringBuilder sb = new StringBuilder();
            for (int i = nStartIndex; i < arrDatas.Length; ++i)
            {
                sb.Append(arrDatas[i].Substring(0, arrDatas[i].Length - 1));
            }
            return decode_array(sb.ToString(), 3, ref ltDistances);
        }

        private static bool decode_array(string sData, int nSize, ref List<double> ltDistances)
        {
            for (int nPos = 0; nPos <= sData.Length - nSize; nPos += nSize)
            {
                long lDecodeValue = UrgService.Decode(sData, nSize, nPos);
                ltDistances.Add(lDecodeValue);
            }
            return true;
        }

        private static long Decode(string sData, int nSize, int nOffset = 0)
        {
            long value = 0;
            for (int i = 0; i < nSize; ++i)
            {
                value <<= 6;
                value |= (long)sData[nOffset + i] - 0x30;
            }
            return value;
        }

        
        public static string TestDecodeSensorDatas(string sContent, ref double lTimeStamp,
            ref List<double> ltDistances)
        {
            string[] arrDatas = sContent.Split(new char[] { '\n' },
                StringSplitOptions.RemoveEmptyEntries);
            if (!arrDatas[0].StartsWith("MD"))
                return "";
            if (arrDatas[1].StartsWith("00") || arrDatas[1].StartsWith("99"))
            {
                lTimeStamp = UrgService.Decode(arrDatas[2], 4);
                return UrgService.TestGetDistanceDatas(arrDatas, 3, ref ltDistances);
            }
            else
                return "";
        }

        private static string TestGetDistanceDatas(string[] arrDatas, int nStartIndex, ref List<double> ltDistances)
        {
            StringBuilder sb = new StringBuilder();
            for (int i = nStartIndex; i < arrDatas.Length; ++i)
            {
                sb.Append(arrDatas[i].Substring(0, arrDatas[i].Length - 1));
            }
            return TestDecodeArray(sb.ToString(), 3, ref ltDistances);
        }

        private static string TestDecodeArray(string sData, int nSize, ref List<double> ltDistances)
        {
            string sResult = "";
            for (int nPos = 0; nPos <= sData.Length - nSize; nPos += nSize)
            {
                double lDecodeValue = UrgService.Decode(sData, nSize, nPos);
                ltDistances.Add(lDecodeValue);
                sResult += lDecodeValue.ToString() + " ";
            }
            return sResult;
        }

    }


雷达数据绘制:

点图:


以Sensor为中心点绘制线图


        // 绘制距离Map
        private void CreateSensorDataImage(List<double> ltDistances, ref Image<Gray, byte> oImgBgr)
        {
            double dScale = 3;
            for (int i = 0; i < ltDistances.Count; i++)
            {
                double dDegree = -120d + i * this.IntervalDegree;
                double dRadian = Utilitys.ConvertToRads(dDegree);
                double dDistance = ltDistances[i] / dScale;
                int nX = (int)(960 + dDistance * Math.Sin(dRadian));
                int nY = (int)(540 - dDistance * Math.Cos(dRadian)) + +this.SupplyY;
                CvInvoke.Line(oImgBgr, new Drawing.Point(960, 540 + this.SupplyY),
                    new Drawing.Point(nX, nY), new MCvScalar(255, 255, 255));
            }
        }

以Sensor为中心点绘制成Ploygon:


Emgu绘制Ploygon:

                this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
                {
                    Image<Bgr, byte> oImgBgr = new Image<Bgr, byte>(1920, 1080, new Bgr(255, 255, 255));
                    
                    List<Drawing.Point> ltPoints = new List<Drawing.Point>();
                    int nCenterX = 960;
                    int nCenterY = 540 + this.SupplyY;
                    ltPoints.Add(new Drawing.Point(nCenterX, nCenterY));


                    double dScale = 3;
                    double dIntervalDegree = 240d / 760d;


                    for (int i = 0; i < ltDistances.Count; i++)
                    {
                        double dDegree = -120d + i * dIntervalDegree;
                        double dRadian = Utilitys.ConvertToRads(dDegree);
                        double dDistance = ltDistances[i] / dScale;
                        int nX = (int)(960 + dDistance * Math.Sin(dRadian));
                        int nY = (int)(540 - dDistance * Math.Cos(dRadian)) + +this.SupplyY;
                        ltPoints.Add(new Drawing.Point(nX, nY));
                    }
                    using (VectorOfPoint vPoint = new VectorOfPoint(ltPoints.ToArray()))
                    using (VectorOfVectorOfPoint vvPoint = new VectorOfVectorOfPoint(vPoint))
                    {
                        CvInvoke.FillPoly(oImgBgr, vvPoint, new Bgr(0, 0, 0).MCvScalar);
                    }
                    
                    this.ImgMainZm.Source = BitmapSourceConvert.ToBitmapSource(oImgBgr);
                }));

其他参考链接:

https://blog.csdn.net/renshengrumenglibing/article/details/8600669

目录
相关文章
|
数据可视化 Shell API
使用VS2010为Windows“.NET研究”7编写一个杀手级WPF应用
  当你使用最新的操作系统,在最新的框架上构建应用程序,并且使用最新版本的Visual Studio的时候,你可以使用许多令人兴奋的新特性。你可以学习一下怎样使用Visual Studio 2010, WPF 4 和 the Windows API Code Pack给你的应用程序添加Windows 7 UI。
934 0
|
C#
将WPF UI单元复制到“.NET研究”剪贴板
  大家在日常工作中应该遇到过这样的问题:需要对应用程序界面进行截屏操作,然后将截屏内容拷贝到其他文档中使用。通常情况下我们会使用一些截屏软件或者“Ctrl+PrtSc ”,本篇将介绍如何在WPF 程序中将UI 单元直接以图片形式复制到剪贴板,以达到为应用程序界面制作快照(Snapshot)的功能。
889 0
|
消息中间件 C# Windows
WPF的“.NET研究”消息机制(一)- 让应用程序动起来
  前言   谈起“消息机制”这个词,我们都会想到Windows的消息机制,系统将键盘鼠标的行为包装成一个Windows Message,然后系统主动将这些Windows Message派发给特定的窗口,实际上消息是被Post到特定窗口所在线程的消息队列,应用程序的消息循环再不断的从消息队列当中获取消息,然后再派发给特定窗口类的窗口过程来处理,在窗口过程中完成一次用户交互。
996 0
|
SQL 前端开发 数据库
WPF企业内训全程“.NET研究”实录(下)
  摘要   WPF企业内训全程实录由于文章比较长,所以一共拆分成了三篇,上篇WPF企业内训全程实录(上)主要讲了基础,中篇WPF企业内训全程实录(中)主要讲解开发模式、团队协作及应用框架,起着承上启下的作用,主要讲解开发模式、团队协作及应用框架。
1835 0
|
C#
WPF中使用amCh“.NET研究”arts绘制股票K线图
  本想自己用GDI绘图, 通过数据直接绘制一张蜡柱图, 但觉得这样子的功能比较少, 所以到网上搜索一些能画出K线图的控件. 发现DynamicDataDisplay挺好的, 在它的开发截图里也发现可以绘制蜡柱图, 但文档好像做的不是很好, 不知道怎么用它来画, 在寻找它比较好的例子的时候发现有人推...
1275 0
|
存储 算法
Emgu-WPF 激光雷达研究-定位实现
原文:Emgu-WPF 激光雷达研究-定位实现 特定位置或障碍物位置定位实现。 读取激光雷达数据并存储于本地作为测试数据。
861 0
|
算法 测试技术
Emgu-WPF 激光雷达研究-移动物体跟踪
原文:Emgu-WPF 激光雷达研究-移动物体跟踪 接前两篇博客: 激光雷达数据解析并绘制雷达图 https://blog.
946 0
|
算法
Emgu-WPF 激光雷达研究-移动物体跟踪2
原文:Emgu-WPF 激光雷达研究-移动物体跟踪2 初步实现了去燥跟踪,并用圆点标注障碍物 https://blog.csdn.net/u013224722/article/details/80780205 测试过程中发现,当存在两个障碍物相对于雷达扫描射线重叠时,距离教远的障碍物信息会丢失。
820 0
|
C# C++ 计算机视觉
WPF特效-绘制实时2D激光雷达图
原文:WPF特效-绘制实时2D激光雷达图 接前两篇: https://blog.csdn.net/u013224722/article/details/80738619 https://blog.csdn.net/u013224722/article/details/80738995 除了c# GDI 、Opencv(c++)、 c# Emgu绘图外,其实c#  WPF绘图功能也很强大。
1816 0
Emgu-WPF 激光雷达研究-移动物体检测
原文:Emgu-WPF 激光雷达研究-移动物体检测 接上篇: https://blog.csdn.net/u013224722/article/details/80738619 先pose出效果图,下次撰写思路。
984 0