main.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include "include/Path_JC.h"
  5. #include "include/studio_geo_c.h"
  6. int main()
  7. {
  8. // 初始化
  9. studio_line_c line = studio_line_c_init();
  10. studio_line_c tmp_line = studio_line_c_init();
  11. studio_line_c_add_point(&line, studio_point_init( 120.0798731, 36.2145540));
  12. studio_line_c_add_point(&line, studio_point_init( 120.0798738, 36.2145750));
  13. studio_line_c_add_point(&line, studio_point_init( 120.0798675, 36.2146510));
  14. studio_line_c_add_point(&line, studio_point_init( 120.0798691, 36.2147368));
  15. studio_line_c_add_point(&line, studio_point_init( 120.0798703, 36.2148213));
  16. studio_line_c_add_point(&line, studio_point_init( 120.0798723, 36.2149135));
  17. studio_line_c_add_point(&line, studio_point_init( 120.0798666, 36.2149940));
  18. studio_line_c_add_point(&line, studio_point_init( 120.0798696, 36.2150526));
  19. studio_line_c_add_point(&line, studio_point_init( 120.0798878, 36.2151376));
  20. studio_line_c_add_point(&line, studio_point_init( 120.0799663, 36.2151995));
  21. studio_line_c_add_point(&line, studio_point_init( 120.0800706, 36.2152123));
  22. studio_line_c_add_point(&line, studio_point_init( 120.0801838, 36.2152091));
  23. studio_line_c_add_point(&line, studio_point_init( 120.0803001, 36.2152075));
  24. studio_line_c_add_point(&line, studio_point_init( 120.0804170, 36.2152073));
  25. studio_line_c_add_point(&line, studio_point_init( 120.0805423, 36.2152265));
  26. studio_line_c_add_point(&line, studio_point_init( 120.0806736, 36.2152321));
  27. studio_line_c_add_point(&line, studio_point_init( 120.0808106, 36.2152131));
  28. studio_line_c_add_point(&line, studio_point_init( 120.0809561, 36.2152573));
  29. studio_line_c_add_point(&line, studio_point_init( 120.0811123, 36.2152301));
  30. studio_line_c_add_point(&line, studio_point_init( 120.0812173, 36.2152231));
  31. studio_line_c_add_point(&line, studio_point_init( 120.0812853, 36.2152213));
  32. studio_line_c_add_point(&line, studio_point_init( 120.0813195, 36.2152221));
  33. studio_line_c_add_point(&line, studio_point_init( 120.0813926, 36.2152216));
  34. studio_line_c_add_point(&line, studio_point_init( 120.0815376, 36.2152218));
  35. studio_line_c_add_point(&line, studio_point_init( 120.0817028, 36.2152380));
  36. studio_line_c_add_point(&line, studio_point_init( 120.0818716, 36.2152200));
  37. studio_line_c_add_point(&line, studio_point_init( 120.0820525, 36.2152473));
  38. studio_line_c_add_point(&line, studio_point_init( 120.0822268, 36.2152360));
  39. studio_line_c_add_point(&line, studio_point_init( 120.0824110, 36.2152340));
  40. studio_line_c_add_point(&line, studio_point_init( 120.0826048, 36.2152435));
  41. studio_line_c_add_point(&line, studio_point_init( 120.0827026, 36.2152465));
  42. studio_line_c_add_point(&line, studio_point_init( 120.0828165, 36.2151315));
  43. studio_line_c_add_point(&line, studio_point_init( 120.0828205, 36.2149925));
  44. studio_line_c_add_point(&line, studio_point_init( 120.0828221, 36.2148178));
  45. studio_line_c_add_point(&line, studio_point_init( 120.0828221, 36.2146781));
  46. studio_line_c_add_point(&line, studio_point_init( 120.0827581, 36.2145310));
  47. studio_line_c_add_point(&line, studio_point_init( 120.0826711, 36.2144438));
  48. studio_line_c_add_point(&line, studio_point_init( 120.0825228, 36.2144608));
  49. studio_line_c_add_point(&line, studio_point_init( 120.0824073, 36.2144546));
  50. studio_line_c_add_point(&line, studio_point_init( 120.0822536, 36.2143848));
  51. studio_line_c_add_point(&line, studio_point_init( 120.0822430, 36.2142630));
  52. studio_line_c_add_point(&line, studio_point_init( 120.0822438, 36.2140925));
  53. studio_line_c_add_point(&line, studio_point_init( 120.0822320, 36.2139576));
  54. studio_line_c_add_point(&line, studio_point_init( 120.0821196, 36.2138603));
  55. studio_line_c_add_point(&line, studio_point_init( 120.0819660, 36.2138743));
  56. studio_line_c_add_point(&line, studio_point_init( 120.0817780, 36.2139215));
  57. studio_line_c_add_point(&line, studio_point_init( 120.0816141, 36.2138886));
  58. studio_line_c_add_point(&line, studio_point_init( 120.0814238, 36.2138956));
  59. studio_line_c_add_point(&line, studio_point_init( 120.0813170, 36.2139134));
  60. studio_line_c_add_point(&line, studio_point_init( 120.0811468, 36.2138908));
  61. studio_line_c_add_point(&line, studio_point_init( 120.0810021, 36.2138916));
  62. studio_line_c_add_point(&line, studio_point_init( 120.0808083, 36.2138886));
  63. studio_line_c_add_point(&line, studio_point_init( 120.0806713, 36.2138871));
  64. studio_line_c_add_point(&line, studio_point_init( 120.0804978, 36.2138565));
  65. studio_line_c_add_point(&line, studio_point_init( 120.0804513, 36.2137123));
  66. studio_line_c_add_point(&line, studio_point_init( 120.0804206, 36.2135151));
  67. studio_line_c_add_point(&line, studio_point_init( 120.0804290, 36.2134026));
  68. studio_line_c_add_point(&line, studio_point_init( 120.0804241, 36.2132476));
  69. studio_line_c_add_point(&line, studio_point_init( 120.0804116, 36.2131533));
  70. studio_line_c_add_point(&line, studio_point_init( 120.0802560, 36.2131256));
  71. studio_line_c_add_point(&line, studio_point_init( 120.0800926, 36.2131391));
  72. studio_line_c_add_point(&line, studio_point_init( 120.0799135, 36.2130891));
  73. studio_line_c_add_point(&line, studio_point_init( 120.0798561, 36.2129658));
  74. studio_line_c_add_point(&line, studio_point_init( 120.0798958, 36.2127938));
  75. studio_line_c_add_point(&line, studio_point_init( 120.0798420, 36.2126813));
  76. studio_line_c_add_point(&line, studio_point_init( 120.0799233, 36.2125713));
  77. studio_line_c_add_point(&line, studio_point_init( 120.0800858, 36.2125850));
  78. studio_line_c_add_point(&line, studio_point_init( 120.0803211, 36.2125908));
  79. studio_line_c_add_point(&line, studio_point_init( 120.0804851, 36.2125933));
  80. studio_line_c_add_point(&line, studio_point_init( 120.0806090, 36.2125443));
  81. studio_line_c_add_point(&line, studio_point_init( 120.0805893, 36.2124040));
  82. studio_line_c_add_point(&line, studio_point_init( 120.0805901, 36.2122559));
  83. studio_line_c_add_point(&line, studio_point_init( 120.0805881, 36.2121241));
  84. studio_line_c_add_point(&line, studio_point_init( 120.0805778, 36.2119698));
  85. studio_line_c_add_point(&line, studio_point_init( 120.0805850, 36.2118591));
  86. studio_line_c_add_point(&line, studio_point_init( 120.0806126, 36.2116988));
  87. studio_line_c_add_point(&line, studio_point_init( 120.0806191, 36.2115958));
  88. studio_line_c_add_point(&line, studio_point_init( 120.0805838, 36.2114628));
  89. studio_line_c_add_point(&line, studio_point_init( 120.0806978, 36.2114123));
  90. studio_line_c_add_point(&line, studio_point_init( 120.0808786, 36.2114136));
  91. studio_line_c_add_point(&line, studio_point_init( 120.0810340, 36.2114101));
  92. studio_line_c_add_point(&line, studio_point_init( 120.0811905, 36.2114678));
  93. studio_line_c_add_point(&line, studio_point_init( 120.0811971, 36.2116091));
  94. studio_line_c_add_point(&line, studio_point_init( 120.0812023, 36.2117358));
  95. studio_line_c_add_point(&line, studio_point_init( 120.0812043, 36.2118245));
  96. studio_line_c_add_point(&line, studio_point_init( 120.0812191, 36.2119326));
  97. studio_line_c_add_point(&line, studio_point_init( 120.0812308, 36.2120568));
  98. studio_line_c_add_point(&line, studio_point_init( 120.0812268, 36.2121850));
  99. studio_line_c_add_point(&line, studio_point_init( 120.0812186, 36.2123110));
  100. studio_line_c_add_point(&line, studio_point_init( 120.0812106, 36.2124338));
  101. studio_line_c_add_point(&line, studio_point_init( 120.0812160, 36.2125433));
  102. studio_line_c_add_point(&line, studio_point_init( 120.0813505, 36.2125793));
  103. studio_line_c_add_point(&line, studio_point_init( 120.0815203, 36.2125826));
  104. studio_line_c_add_point(&line, studio_point_init( 120.0816993, 36.2125836));
  105. studio_line_c_add_point(&line, studio_point_init( 120.0818490, 36.2126136));
  106. studio_line_c_add_point(&line, studio_point_init( 120.0818573, 36.2127058));
  107. studio_line_c_add_point(&line, studio_point_init( 120.0818611, 36.2128105));
  108. studio_line_c_add_point(&line, studio_point_init( 120.0818571, 36.2129800));
  109. studio_line_c_add_point(&line, studio_point_init( 120.0817858, 36.2130876));
  110. studio_line_c_add_point(&line, studio_point_init( 120.0816405, 36.2131116));
  111. studio_line_c_add_point(&line, studio_point_init( 120.0814890, 36.2131188));
  112. studio_line_c_add_point(&line, studio_point_init( 120.0813440, 36.2131221));
  113. studio_line_c_add_point(&line, studio_point_init( 120.0811786, 36.2131273));
  114. studio_line_c_add_point(&line, studio_point_init( 120.0809845, 36.2131298));
  115. studio_line_c_add_point(&line, studio_point_init( 120.0808101, 36.2131210));
  116. studio_line_c_add_point(&line, studio_point_init( 120.0806503, 36.2131143));
  117. studio_line_c_add_point(&line, studio_point_init( 120.0804963, 36.2131231));
  118. studio_line_c_add_point(&line, studio_point_init( 120.0804051, 36.2131858));
  119. studio_line_c_add_point(&line, studio_point_init( 120.0804320, 36.2133146));
  120. studio_line_c_add_point(&line, studio_point_init( 120.0804310, 36.2134671));
  121. studio_line_c_add_point(&line, studio_point_init( 120.0804475, 36.2135978));
  122. studio_line_c_add_point(&line, studio_point_init( 120.0804466, 36.2136908));
  123. studio_line_c_add_point(&line, studio_point_init( 120.0804383, 36.2137131));
  124. studio_line_c_add_point(&line, studio_point_init( 120.0804383, 36.2137353));
  125. studio_line_c_add_point(&line, studio_point_init( 120.0804388, 36.2138191));
  126. studio_line_c_add_point(&line, studio_point_init( 120.0804340, 36.2139444));
  127. studio_line_c_add_point(&line, studio_point_init( 120.0804275, 36.2140595));
  128. studio_line_c_add_point(&line, studio_point_init( 120.0804311, 36.2141696));
  129. studio_line_c_add_point(&line, studio_point_init( 120.0804268, 36.2142596));
  130. studio_line_c_add_point(&line, studio_point_init( 120.0804221, 36.2143248));
  131. studio_line_c_add_point(&line, studio_point_init( 120.0804638, 36.2144208));
  132. studio_line_c_add_point(&line, studio_point_init( 120.0806425, 36.2144220));
  133. studio_line_c_add_point(&line, studio_point_init( 120.0807880, 36.2144381));
  134. studio_line_c_add_point(&line, studio_point_init( 120.0809288, 36.2144316));
  135. studio_line_c_add_point(&line, studio_point_init( 120.0810285, 36.2144035));
  136. studio_line_c_add_point(&line, studio_point_init( 120.0811473, 36.2143823));
  137. studio_line_c_add_point(&line, studio_point_init( 120.0812603, 36.2143681));
  138. studio_line_c_add_point(&line, studio_point_init( 120.0813386, 36.2143738));
  139. studio_line_c_add_point(&line, studio_point_init( 120.0814586, 36.2143900));
  140. studio_line_c_add_point(&line, studio_point_init( 120.0816028, 36.2144006));
  141. studio_line_c_add_point(&line, studio_point_init( 120.0817420, 36.2144165));
  142. studio_line_c_add_point(&line, studio_point_init( 120.0818983, 36.2144256));
  143. studio_line_c_add_point(&line, studio_point_init( 120.0820240, 36.2144223));
  144. studio_line_c_add_point(&line, studio_point_init( 120.0821661, 36.2144248));
  145. studio_line_c_add_point(&line, studio_point_init( 120.0822980, 36.2144378));
  146. studio_line_c_add_point(&line, studio_point_init( 120.0824326, 36.2144521));
  147. studio_line_c_add_point(&line, studio_point_init( 120.0825441, 36.2144588));
  148. studio_line_c_add_point(&line, studio_point_init( 120.0826215, 36.2144620));
  149. studio_line_c_add_point(&line, studio_point_init( 120.0827366, 36.2144941));
  150. studio_line_c_add_point(&line, studio_point_init( 120.0827791, 36.2145916));
  151. studio_line_c_add_point(&line, studio_point_init( 120.0828050, 36.2146823));
  152. studio_line_c_add_point(&line, studio_point_init( 120.0828073, 36.2148071));
  153. studio_line_c_add_point(&line, studio_point_init( 120.0828108, 36.2149333));
  154. studio_line_c_add_point(&line, studio_point_init( 120.0827991, 36.2150419));
  155. studio_line_c_add_point(&line, studio_point_init( 120.0827600, 36.2151475));
  156. studio_line_c_add_point(&line, studio_point_init( 120.0826771, 36.2152325));
  157. studio_line_c_add_point(&line, studio_point_init( 120.0825873, 36.2152428));
  158. studio_line_c_add_point(&line, studio_point_init( 120.0824720, 36.2152433));
  159. studio_line_c_add_point(&line, studio_point_init( 120.0823341, 36.2152420));
  160. studio_line_c_add_point(&line, studio_point_init( 120.0822156, 36.2152483));
  161. studio_line_c_add_point(&line, studio_point_init( 120.0822723, 36.2155193));
  162. // 转笛卡尔(简)
  163. deg2Des(&line, line.size);
  164. // 中值滤波
  165. median_filter_2d(&line, &tmp_line, line.size, 3);
  166. // 残差滤波(可不用)
  167. var_filter(&line, &tmp_line, line.size, 0.5);
  168. // 累计距离
  169. float *sum_dis_tmp = (float*)malloc(line.size * sizeof(float));
  170. cumdist(&line, sum_dis_tmp, line.size);
  171. // 样条插样(一阶)
  172. spline_interpolation(sum_dis_tmp, &line, line.size, &tmp_line, 100);
  173. // 打印测试
  174. for(int i;i < 100;i++)
  175. {
  176. printf("%.7f, %.7f;\n",studio_line_c_get_point(&tmp_line, i).x,studio_line_c_get_point(&tmp_line, i).y);
  177. }
  178. // 释放内存
  179. studio_line_c_destroy(&line);
  180. studio_line_c_destroy(&tmp_line);
  181. }