From 45a35805eb1e59972ad9a9c80815f2c030dc69bb Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期五, 26 十二月 2025 16:13:14 +0800
Subject: [PATCH] 割草机新增了属性

---
 shoudongbianjie.properties               |    6 
 src/gecaoji/Device.java                  |   51 ++++++++++
 src/set/Sets.java                        |    2 
 dikuai.properties                        |    8 
 src/lujing/MowingPathGenerationPage.java |   50 ++++++----
 src/lujing/YixinglujingHaveObstacel.java |  161 ++++++++++++++++++-------------
 set.properties                           |    8 
 Obstacledge.properties                   |    7 +
 8 files changed, 190 insertions(+), 103 deletions(-)

diff --git a/Obstacledge.properties b/Obstacledge.properties
index 195163c..73d7371 100644
--- a/Obstacledge.properties
+++ b/Obstacledge.properties
@@ -1,5 +1,5 @@
 # 鍓茶崏鏈哄湴鍧楅殰纰嶇墿閰嶇疆鏂囦欢
-# 鐢熸垚鏃堕棿锛�2025-12-26T15:20:50.727323200
+# 鐢熸垚鏃堕棿锛�2025-12-26T15:36:20.593959500
 # 鍧愭爣绯伙細WGS84锛堝害鍒嗘牸寮忥級
 
 # ============ 鍦板潡鍩哄噯绔欓厤缃� ============
@@ -12,3 +12,8 @@
 # 鏍煎紡锛歱lot.[鍦板潡缂栧彿].obstacle.[闅滅鐗╁悕绉癩.originalCoords=[鍧愭爣涓瞉
 # 鏍煎紡锛歱lot.[鍦板潡缂栧彿].obstacle.[闅滅鐗╁悕绉癩.xyCoords=[鍧愭爣涓瞉
 
+# --- 鍦板潡LAND1鐨勯殰纰嶇墿 ---
+plot.LAND1.obstacle.闅滅鐗�1.shape=1
+plot.LAND1.obstacle.闅滅鐗�1.originalCoords=0.000000,N;0.000000,E;0.000000,N;0.000000,E;0.000000,N;0.000000,E;0.000000,N;0.000000,E;0.000000,N;0.000000,E
+plot.LAND1.obstacle.闅滅鐗�1.xyCoords=25.17,9.94;17.74,67.19;113.88,72.00;120.00,19.12;74.99,-4.48
+
diff --git a/dikuai.properties b/dikuai.properties
index fce9d72..79cef9e 100644
--- a/dikuai.properties
+++ b/dikuai.properties
@@ -1,5 +1,5 @@
 #Dikuai Properties
-#Fri Dec 26 15:20:50 CST 2025
+#Fri Dec 26 15:36:20 CST 2025
 LAND1.angleThreshold=-1
 LAND1.baseStationCoordinates=3949.89151752,N,11616.79267501,E
 LAND1.boundaryCoordinates=4.30,87.65;-2.36,-65.51;44.25,-66.72;49.70,-14.05;98.13,-15.87;99.34,-69.75;137.48,-67.93;134.45,90.07;4.30,87.65
@@ -17,10 +17,10 @@
 LAND1.mowingSafetyDistance=0.53
 LAND1.mowingTrack=-1
 LAND1.mowingWidth=50
-LAND1.obstacleCoordinates=-1
-LAND1.plannedPath=136.940221,-67.425155;133.930254,89.530244;4.807861,87.129352;-1.807069,-64.994176;43.773311,-66.177447;49.223902,-13.501734;98.648661,-15.359117;99.857663,-69.194695;136.940221,-67.425155;136.690404,-67.437076;133.680297,89.525597;133.180383,89.516301;136.190769,-67.460918;135.691134,-67.484760;132.680469,89.507006;132.180556,89.497710;135.191500,-67.508602;134.691865,-67.532444;131.680642,89.488415;131.180728,89.479120;134.192230,-67.556286;133.692595,-67.580128;130.680815,89.469824;130.180901,89.460529;133.192961,-67.603970;132.693326,-67.627812;129.680987,89.451234;129.181074,89.441938;132.193691,-67.651654;131.694057,-67.675496;128.681160,89.432643;128.181246,89.423348;131.194422,-67.699338;130.694787,-67.723180;127.681333,89.414052;127.181419,89.404757;130.195152,-67.747022;129.695518,-67.770864;126.681505,89.395462;126.181592,89.386166;129.195883,-67.794706;128.696248,-67.818548;125.681678,89.376871;125.181764,89.367575;128.196614,-67.842390;127.696979,-67.866232;124.681851,89.358280;124.181937,89.348985;127.197344,-67.890074;126.697709,-67.913916;123.682023,89.339689;123.182110,89.330394;126.198075,-67.937758;125.698440,-67.961600;122.682196,89.321099;122.182282,89.311803;125.198805,-67.985442;124.699171,-68.009284;121.682369,89.302508;121.182455,89.293213;124.199536,-68.033126;123.699901,-68.056968;120.682541,89.283917;120.182628,89.274622;123.200267,-68.080811;122.700632,-68.104653;119.682714,89.265327;119.182800,89.256031;122.200997,-68.128495;121.701362,-68.152337;118.682887,89.246736;118.182973,89.237440;121.201728,-68.176179;120.702093,-68.200021;117.683059,89.228145;117.183145,89.218850;120.202458,-68.223863;119.702824,-68.247705;116.683232,89.209554;116.183318,89.200259;119.203189,-68.271547;118.703554,-68.295389;115.683404,89.190964;115.183491,89.181668;118.203919,-68.319231;117.704285,-68.343073;114.683577,89.172373;114.183663,89.163078;117.204650,-68.366915;116.705015,-68.390757;113.683750,89.153782;113.183836,89.144487;116.205381,-68.414599;115.705746,-68.438441;112.683922,89.135191;112.184009,89.125896;115.206111,-68.462283;114.706476,-68.486125;111.684095,89.116601;111.184181,89.107305;114.206842,-68.509967;113.707207,-68.533809;110.684268,89.098010;110.184354,89.088715;113.207572,-68.557651;112.707938,-68.581493;109.684440,89.079419;109.184527,89.070124;112.208303,-68.605335;111.708668,-68.629177;108.684613,89.060829;108.184699,89.051533;111.209034,-68.653019;110.709399,-68.676861;107.684786,89.042238;107.184872,89.032943;110.209764,-68.700703;109.710129,-68.724545;106.684958,89.023647;106.185045,89.014352;109.210495,-68.748387;108.710860,-68.772229;105.685131,89.005056;105.185217,88.995761;108.211225,-68.796072;107.711591,-68.819914;104.685304,88.986466;104.185390,88.977170;107.211956,-68.843756;106.712321,-68.867598;103.685476,88.967875;103.185563,88.958580;106.212686,-68.891440;105.713052,-68.915282;102.685649,88.949284;102.185735,88.939989;105.213417,-68.939124;104.713782,-68.962966;101.685822,88.930694;101.185908,88.921398;104.214148,-68.986808;103.714513,-69.010650;100.685994,88.912103;100.186081,88.902807;103.214878,-69.034492;102.715243,-69.058334;99.686167,88.893512;99.186253,88.884217;102.215609,-69.082176;101.715974,-69.106018;98.686340,88.874921;98.186426,88.865626;101.216339,-69.129860;100.716705,-69.153702;97.686512,88.856331;97.186599,88.847035;100.217070,-69.177544;98.896710,-26.404472;96.686685,88.837740;96.186771,88.828445;98.184464,-15.341673;97.684011,-15.322866;95.686858,88.819149;95.186944,88.809854;97.183559,-15.304059;96.683106,-15.285252;94.687030,88.800559;94.187116,88.791263;96.182654,-15.266445;95.682201,-15.247638;93.687203,88.781968;93.187289,88.772672;95.181748,-15.228831;94.681296,-15.210024;92.687375,88.763377;92.187462,88.754082;94.180843,-15.191217;93.680391,-15.172410;91.687548,88.744786;91.187634,88.735491;93.179938,-15.153602;92.679485,-15.134795;90.687721,88.726196;90.187807,88.716900;92.179033,-15.115988;91.678580,-15.097181;89.687893,88.707605;89.187980,88.698310;91.178128,-15.078374;90.677675,-15.059567;88.688066,88.689014;88.188152,88.679719;90.177222,-15.040760;89.676770,-15.021953;87.688239,88.670423;87.188325,88.661128;89.176317,-15.003146;88.675865,-14.984339;86.688411,88.651833;86.188498,88.642537;88.175412,-14.965532;87.674959,-14.946725;85.688584,88.633242;85.188670,88.623947;87.174507,-14.927918;86.674054,-14.909111;84.688757,88.614651;84.188843,88.605356;86.173602,-14.890304;85.673149,-14.871497;83.688929,88.596061;83.189016,88.586765;85.172696,-14.852690;84.672244,-14.833883;82.689102,88.577470;82.189188,88.568175;84.171791,-14.815076;83.671339,-14.796269;81.689275,88.558879;81.189361,88.549584;83.170886,-14.777462;82.670433,-14.758655;80.689447,88.540288;80.189534,88.530993;82.169981,-14.739848;81.669528,-14.721041;79.689620,88.521698;79.189706,88.512402;81.169076,-14.702234;80.668623,-14.683427;78.689793,88.503107;78.189879,88.493812;80.168170,-14.664620;79.667718,-14.645813;77.689965,88.484516;77.190052,88.475221;79.167265,-14.627006;78.666813,-14.608199;76.690138,88.465926;76.190224,88.456630;78.166360,-14.589392;77.665907,-14.570585;75.690311,88.447335;75.190397,88.438039;77.165455,-14.551778;76.665002,-14.532971;74.690483,88.428744;74.190570,88.419449;76.164550,-14.514164;75.664097,-14.495357;73.690656,88.410153;73.190742,88.400858;75.163644,-14.476550;74.663192,-14.457743;72.690829,88.391563;72.190915,88.382267;74.162739,-14.438936;73.662287,-14.420129;71.691001,88.372972;71.191087,88.363677;73.161834,-14.401322;72.661381,-14.382515;70.691174,88.354381;70.191260,88.345086;72.160929,-14.363708;71.660476,-14.344901;69.691346,88.335791;69.191433,88.326495;71.160024,-14.326094;70.659571,-14.307287;68.691519,88.317200;68.191605,88.307904;70.159118,-14.288480;69.658666,-14.269673;67.691692,88.298609;67.191778,88.289314;69.158213,-14.250866;68.657761,-14.232059;66.691864,88.280018;66.191951,88.270723;68.157308,-14.213252;67.656855,-14.194445;65.692037,88.261428;65.192123,88.252132;67.156403,-14.175638;66.655950,-14.156831;64.692210,88.242837;64.192296,88.233542;66.155498,-14.138024;65.655045,-14.119217;63.692382,88.224246;63.192469,88.214951;65.154592,-14.100410;64.654140,-14.081603;62.692555,88.205655;62.192641,88.196360;64.153687,-14.062796;63.653235,-14.043989;61.692728,88.187065;61.192814,88.177769;63.152782,-14.025182;62.652329,-14.006375;60.692900,88.168474;60.192987,88.159179;62.151877,-13.987568;61.651424,-13.968761;59.693073,88.149883;59.193159,88.140588;61.150972,-13.949954;60.650519,-13.931147;58.693246,88.131293;58.193332,88.121997;60.150066,-13.912340;59.649614,-13.893532;57.693418,88.112702;57.193505,88.103407;59.149161,-13.874725;58.648709,-13.855918;56.693591,88.094111;56.193677,88.084816;58.148256,-13.837111;57.647803,-13.818304;55.693764,88.075520;55.193850,88.066225;57.147351,-13.799497;56.646898,-13.780690;54.693936,88.056930;54.194023,88.047634;56.146446,-13.761883;55.645993,-13.743076;53.694109,88.038339;53.194195,88.029044;55.145540,-13.724269;54.645088,-13.705462;52.694282,88.019748;52.194368,88.010453;54.144635,-13.686655;53.644183,-13.667848;51.694454,88.001158;51.194541,87.991862;53.143730,-13.649041;52.643277,-13.630234;50.694627,87.982567;50.194713,87.973271;52.142825,-13.611427;51.642372,-13.592620;49.694800,87.963976;49.194886,87.954681;51.141920,-13.573813;50.641467,-13.555006;48.694972,87.945385;48.195059,87.936090;50.141014,-13.536199;49.640562,-13.517392;47.695145,87.926795;47.195231,87.917499;49.153262,-14.184416;48.731362,-18.261751;46.695317,87.908204;46.195404,87.898909;48.309462,-22.339085;47.887562,-26.416420;45.695490,87.889613;45.195576,87.880318;47.465662,-30.493755;47.043762,-34.571089;44.695663,87.871023;44.195749,87.861727;46.621861,-38.648424;46.199961,-42.725758;43.695835,87.852432;43.195922,87.843136;45.778061,-46.803093;45.356161,-50.880428;42.696008,87.833841;42.196094,87.824546;44.934261,-54.957762;44.512361,-59.035097;41.696181,87.815250;41.196267,87.805955;44.090461,-63.112431;43.649086,-66.174222;40.696353,87.796660;40.196440,87.787364;43.148745,-66.161233;42.648404,-66.148244;39.696526,87.778069;39.196612,87.768774;42.148063,-66.135255;41.647722,-66.122266;38.696699,87.759478;38.196785,87.750183;41.147381,-66.109277;40.647040,-66.096288;37.696871,87.740887;37.196958,87.731592;40.146699,-66.083299;39.646358,-66.070310;36.697044,87.722297;36.197130,87.713001;39.146017,-66.057322;38.645676,-66.044333;35.697217,87.703706;35.197303,87.694411;38.145335,-66.031344;37.644994,-66.018355;34.697389,87.685115;34.197476,87.675820;37.144653,-66.005366;36.644312,-65.992377;33.697562,87.666525;33.197648,87.657229;36.143971,-65.979388;35.643630,-65.966399;32.697735,87.647934;32.197821,87.638639;35.143289,-65.953410;34.642948,-65.940421;31.697907,87.629343;31.197994,87.620048;34.142607,-65.927433;33.642266,-65.914444;30.698080,87.610752;30.198166,87.601457;33.141925,-65.901455;32.641584,-65.888466;29.698253,87.592162;29.198339,87.582866;32.141243,-65.875477;31.640902,-65.862488;28.698425,87.573571;28.198512,87.564276;31.140561,-65.849499;30.640219,-65.836510;27.698598,87.554980;27.198684,87.545685;30.139878,-65.823521;29.639537,-65.810532;26.698771,87.536390;26.198857,87.527094;29.139196,-65.797544;28.638855,-65.784555;25.698943,87.517799;25.199030,87.508503;28.138514,-65.771566;27.638173,-65.758577;24.699116,87.499208;24.199202,87.489913;27.137832,-65.745588;26.637491,-65.732599;23.699288,87.480617;23.199375,87.471322;26.137150,-65.719610;25.636809,-65.706621;22.699461,87.462027;22.199547,87.452731;25.136468,-65.693632;24.636127,-65.680643;21.699634,87.443436;21.199720,87.434141;24.135786,-65.667655;23.635445,-65.654666;20.699806,87.424845;20.199893,87.415550;23.135104,-65.641677;22.634763,-65.628688;19.699979,87.406255;19.200065,87.396959;22.134422,-65.615699;21.634081,-65.602710;18.700152,87.387664;18.200238,87.378368;21.133740,-65.589721;20.633399,-65.576732;17.700324,87.369073;17.200411,87.359778;20.133058,-65.563743;19.632717,-65.550754;16.700497,87.350482;16.200583,87.341187;19.132376,-65.537766;18.632035,-65.524777;15.700670,87.331892;15.200756,87.322596;18.131694,-65.511788;17.631353,-65.498799;14.700842,87.313301;14.200929,87.304006;17.131012,-65.485810;16.630671,-65.472821;13.701015,87.294710;13.201101,87.285415;16.130330,-65.459832;15.629989,-65.446843;12.701188,87.276119;12.201274,87.266824;15.129648,-65.433854;14.629307,-65.420865;11.701360,87.257529;11.201447,87.248233;14.128966,-65.407877;13.628625,-65.394888;10.701533,87.238938;10.201619,87.229643;13.128284,-65.381899;12.627943,-65.368910;9.701706,87.220347;9.201792,87.211052;12.127602,-65.355921;11.627261,-65.342932;8.701878,87.201757;8.201965,87.192461;11.126920,-65.329943;10.626579,-65.316954;7.702051,87.183166;7.202137,87.173871;10.126238,-65.303965;9.625896,-65.290976;6.702224,87.164575;6.202310,87.155280;9.125555,-65.277988;8.625214,-65.264999;5.702396,87.145984;5.202483,87.136689;8.124873,-65.252010;7.624532,-65.239021;4.734767,85.448411;4.387726,77.467519;7.124191,-65.226032;6.623850,-65.213043;4.040686,69.486626;3.693645,61.505734;6.123509,-65.200054;5.623168,-65.187065;3.346605,53.524841;2.999564,45.543949;5.122827,-65.174076;4.622486,-65.161087;2.652523,37.563056;2.305483,29.582163;4.122145,-65.148099;3.621804,-65.135110;1.958442,21.601271;1.611401,13.620378;3.121463,-65.122121;2.621122,-65.109132;1.264361,5.639486;0.917320,-2.341407;2.120781,-65.096143;1.620440,-65.083154;0.570279,-10.322299;0.223239,-18.303192;1.120099,-65.070165;0.619758,-65.057176;-0.123802,-26.284084;-0.470843,-34.264977;0.119417,-65.044187;-0.380924,-65.031198;-0.817883,-42.245869;-1.164924,-50.226762;-0.881265,-65.018210;-1.381606,-65.005221;-1.511964,-58.207655
+LAND1.obstacleCoordinates=25.17,9.94;17.74,67.19;113.88,72.00;120.00,19.12;74.99,-4.48
+LAND1.plannedPath=138.019779,-68.434845;137.127629,-21.913485;136.166686,28.195080;135.316239,72.541818;134.969746,90.609756;111.243743,90.168596;15.523233,88.388776;3.792139,88.170648;2.824293,65.913086;0.722058,17.568015;-1.965221,-44.231336;-2.912931,-66.025824;35.693486,-67.028051;44.726689,-67.262553;49.925119,-17.023781;50.176098,-14.598266;54.258476,-14.751682;97.611339,-16.380883;98.822337,-70.305305;129.645759,-68.834445;138.019779,-68.434845;137.769962,-68.446766;136.876187,-21.840707;135.919129,28.065280;135.066433,72.529320;134.719790,90.605108;134.219876,90.595813;134.566820,72.504324;135.424016,27.805678;136.373304,-21.695151;137.270327,-68.470608;136.770692,-68.494450;135.870421,-21.549596;134.928902,27.546076;134.067208,72.479327;133.719962,90.586517;133.220049,90.577222;133.567595,72.454331;134.433789,27.286474;135.367537,-21.404040;136.271057,-68.518293;135.771423,-68.542135;134.864654,-21.258485;133.938675,27.026872;133.067983,72.429335;132.720135,90.567927;132.220221,90.558631;132.568370,72.404339;133.443562,26.767270;134.361771,-21.112929;135.271788,-68.565977;134.772153,-68.589819;133.858887,-20.967374;132.948448,26.507669;132.068757,72.379343;131.720308,90.549336;131.220394,90.540041;131.569145,72.354346;132.453335,26.248067;133.356004,-20.821818;134.272519,-68.613661;133.772884,-68.637503;132.853121,-20.676263;131.958221,25.988465;131.069532,72.329350;130.720480,90.530745;130.220567,90.521450;130.569920,72.304354;131.463108,25.728863;132.350238,-20.530707;133.273249,-68.661345;132.773615,-68.685187;131.847354,-20.385152;130.967994,25.469261;130.070307,72.279358;129.720653,90.512154;129.220739,90.502859;129.570695,72.254361;130.472881,25.209659;131.344471,-20.239596;132.273980,-68.709029;131.774345,-68.732871;130.841588,-20.094040;129.977767,24.950058;129.071082,72.229365;128.720826,90.493564;128.220912,90.484268;128.571469,72.204369;129.482654,24.690456;130.338705,-19.948485;131.274710,-68.756713;130.775076,-68.780555;129.835821,-19.802929;128.987540,24.430854;128.071857,72.179373;127.720998,90.474973;127.221084,90.465678;127.572244,72.154377;128.492427,24.171252;129.332938,-19.657374;130.275441,-68.804397;129.775806,-68.828239;128.830055,-19.511818;127.997313,23.911650;127.072632,72.129380;126.721171,90.456382;126.221257,90.447087;126.573019,72.104384;127.502200,23.652048;128.327171,-19.366263;129.202362,-65.003264;129.276172,-68.852081;128.776537,-68.875923;128.602946,-59.823997;127.824288,-19.220707;127.007086,23.392447;126.073407,72.079388;125.721343,90.437792;125.221430,90.428496;125.573794,72.054392;126.511973,23.132845;127.321405,-19.075152;128.003530,-54.644731;128.276902,-68.899765;127.777267,-68.923607;127.404114,-49.465465;126.818522,-18.929596;126.016859,22.873243;125.074181,72.029395;124.721516,90.419201;124.221602,90.409906;124.574569,72.004399;125.521746,22.613641;126.315638,-18.784041;126.804699,-44.286199;127.277633,-68.947449;126.777998,-68.971291;126.205283,-39.106932;125.812755,-18.638485;125.026633,22.354039;124.074956,71.979403;123.721689,90.400610;123.221775,90.391315;123.575344,71.954407;124.531519,22.094437;125.309872,-18.492930;125.605867,-33.927666;126.278363,-68.995133;125.778729,-69.018975;125.006451,-28.748400;124.806988,-18.347374;124.036406,21.834836;123.075731,71.929411;122.721861,90.382019;122.221948,90.372724;122.576119,71.904414;123.541292,21.575234;124.304105,-18.201818;124.407035,-23.569134;125.279094,-69.042817;124.779459,-69.066659;123.807619,-18.389867;123.801222,-18.056263;123.046179,21.315632;122.076506,71.879418;121.722034,90.363429;121.222120,90.354133;121.576893,71.854422;122.551065,21.056030;123.208204,-13.210601;123.298339,-17.910707;124.279824,-69.090501;123.780190,-69.114343;122.795455,-17.765152;122.608788,-8.031335;122.055952,20.796428;121.077281,71.829426;120.722207,90.344838;120.222293,90.335543;120.577668,71.804429;121.560838,20.536826;122.009372,-2.852069;122.292572,-17.619596;123.280555,-69.138185;122.780920,-69.162027;121.789689,-17.474041;121.409956,2.327198;121.065725,20.277225;120.078056,71.779433;119.722379,90.326247;119.222466,90.316952;119.578443,71.754437;120.570611,20.017623;120.810540,7.506464;121.286805,-17.328485;122.281286,-69.185869;121.781651,-69.209712;120.783922,-17.182930;120.211124,12.685730;120.075498,19.758021;119.078830,71.729441;118.722552,90.307657;118.222638,90.298361;118.579218,71.704445;119.580384,19.498419;119.611709,17.864996;120.281039,-17.037374;121.282016,-69.233554;120.782382,-69.257396;119.778156,-16.891819;119.085271,19.238817;119.012293,23.044263;118.079605,71.679448;117.722725,90.289066;117.222811,90.279770;117.579993,71.654452;118.412877,28.223529;118.590157,18.979215;119.275272,-16.746263;120.282747,-69.281238;119.783112,-69.305080;118.772389,-16.600708;118.095044,18.719614;117.813461,33.402795;117.080380,71.629456;116.722897,90.270475;116.222984,90.261180;116.580768,71.604460;117.214045,38.582061;117.599930,18.460012;118.269506,-16.455152;119.283477,-69.328922;118.783843,-69.352764;117.766622,-16.309596;117.104817,18.200410;116.614629,43.761327;116.081155,71.579464;115.723070,90.251884;115.223156,90.242589;115.581542,71.554467;116.015214,48.940594;116.609703,17.940808;117.263739,-16.164041;118.284208,-69.376606;117.784573,-69.400448;116.760856,-16.018485;116.114590,17.681206;115.415798,54.119860;115.081930,71.529471;114.723243,90.233294;114.223329,90.223998;114.582317,71.504475;114.816382,59.299126;115.619476,17.421604;116.257973,-15.872930;117.284939,-69.424290;116.785304,-69.448132;115.755089,-15.727374;115.124363,17.162003;114.216966,64.478392;114.082705,71.479479;113.723415,90.214703;113.223502,90.205408;113.583092,71.454482;113.617550,69.657659;114.629249,16.902401;115.252206,-15.581819;116.285669,-69.471974;115.786034,-69.495816;114.749323,-15.436263;114.134136,16.642799;113.083480,71.429486;113.018134,74.836925;112.723588,90.196112;112.223674,90.186817;112.418719,80.016191;112.583867,71.404490;113.639022,16.383197;114.246439,-15.290708;115.286400,-69.519658;114.786765,-69.543500;113.743556,-15.145152;113.143909,16.123595;112.084254,71.379494;111.819303,85.195457;111.723761,90.177522;111.243743,90.168596;111.223847,90.168226;111.584642,71.354498;112.648795,15.863993;113.240673,-14.999597;114.287130,-69.567342;113.787496,-69.591184;112.737790,-14.854041;112.153682,15.604392;111.085029,71.329501;110.723933,90.158931;110.224020,90.149635;110.585417,71.304505;111.658568,15.344790;112.234906,-14.708485;113.287861,-69.615026;112.788226,-69.638868;111.732023,-14.562930;111.163455,15.085188;110.085804,71.279509;109.724106,90.140340;109.224192,90.131045;109.586192,71.254513;110.668341,14.825586;111.229140,-14.417374;112.288591,-69.662710;111.788957,-69.686552;110.726256,-14.271819;110.173228,14.565984;109.086579,71.229516;108.724279,90.121749;108.224365,90.112454;108.586966,71.204520;109.678114,14.306382;110.223373,-14.126263;111.289322,-69.710394;110.789687,-69.734236;109.720490,-13.980708;109.183001,14.046781;108.087354,71.179524;107.724451,90.103159;107.224538,90.093863;107.587741,71.154528;108.687887,13.787179;109.217607,-13.835152;110.290053,-69.758078;109.790418,-69.781920;108.714723,-13.689597;108.192774,13.527577;107.088129,71.129532;106.724624,90.084568;106.224710,90.075273;106.588516,71.104535;107.697660,13.267975;108.211840,-13.544041;109.290783,-69.805762;108.791148,-69.829604;107.708957,-13.398486;107.202547,13.008373;106.088904,71.079539;105.724797,90.065977;105.224883,90.056682;105.589291,71.054543;106.707433,12.748771;107.206074,-13.252930;108.291514,-69.853446;107.791879,-69.877288;106.703190,-13.107375;106.212320,12.489170;105.089678,71.029547;104.724969,90.047386;104.225055,90.038091;104.590066,71.004550;105.717206,12.229568;106.200307,-12.961819;107.292244,-69.901130;106.792610,-69.924973;105.697424,-12.816263;105.222093,11.969966;104.090453,70.979554;103.725142,90.028796;103.225228,90.019500;103.590841,70.954558;104.726979,11.710364;105.194540,-12.670708;106.292975,-69.948815;105.793340,-69.972657;104.691657,-12.525152;104.231866,11.450762;103.091228,70.929562;102.725314,90.010205;102.225401,90.000910;102.591616,70.904566;103.736752,11.191160;104.188774,-12.379597;105.293706,-69.996499;104.794071,-70.020341;103.685891,-12.234041;103.241639,10.931559;102.092003,70.879569;101.725487,89.991614;101.225573,89.982319;101.592390,70.854573;102.746525,10.671957;103.183007,-12.088486;104.294436,-70.044183;103.794801,-70.068025;102.680124,-11.942930;102.251412,10.412355;101.092778,70.829577;100.725660,89.973024;100.225746,89.963728;100.593165,70.804581;101.756298,10.152753;102.177241,-11.797375;103.295167,-70.091867;102.795532,-70.115709;101.674357,-11.651819;101.261185,9.893151;100.093553,70.779585;99.725832,89.954433;99.225919,89.945138;99.593940,70.754588;100.766071,9.633549;101.171474,-11.506264;102.295897,-70.139551;101.796263,-70.163393;100.668591,-11.360708;100.270958,9.373948;99.094327,70.729592;98.726005,89.935842;98.226091,89.926547;98.594715,70.704596;99.775844,9.114346;100.165708,-11.215153;101.296628,-70.187235;100.796993,-70.211077;99.662824,-11.069597;99.280731,8.854744;98.095102,70.679600;97.726178,89.917251;97.226264,89.907956;97.595490,70.654603;98.785617,8.595142;99.159941,-10.924041;100.297358,-70.234919;99.797724,-70.258761;98.657058,-10.778486;98.290504,8.335540;97.095877,70.629607;96.726350,89.898661;96.226437,89.889365;96.596265,70.604611;97.795390,8.075939;98.154174,-10.632930;99.298089,-70.282603;98.658673,-63.017540;97.651291,-10.487375;97.300277,7.816337;96.096652,70.579615;95.726523,89.880070;95.226609,89.870775;95.597039,70.554619;96.805163,7.556735;97.148408,-10.341819;97.263970,-16.367829;96.763517,-16.349022;96.645525,-10.196264;96.310050,7.297133;95.097427,70.529622;94.726696,89.861479;94.226782,89.852184;94.597814,70.504626;95.814936,7.037531;96.142641,-10.050708;96.263065,-16.330215;95.762612,-16.311408;95.639758,-9.905153;95.319823,6.777929;94.098202,70.479630;93.726868,89.842889;93.226955,89.833593;93.598589,70.454634;94.824709,6.518328;95.136875,-9.759597;95.262160,-16.292601;94.761707,-16.273794;94.633991,-9.614042;94.329596,6.258726;93.098977,70.429637;92.727041,89.824298;92.227127,89.815002;92.599364,70.404641;93.834482,5.999124;94.131108,-9.468486;94.261254,-16.254987;93.760802,-16.236180;93.628225,-9.322931;93.339369,5.739522;92.099751,70.379645;91.727214,89.805707;91.227300,89.796412;91.600139,70.354649;92.844255,5.479920;93.125342,-9.177375;93.260349,-16.217373;92.759897,-16.198566;92.622458,-9.031819;92.349142,5.220318;91.100526,70.329653;90.727386,89.787116;90.227473,89.777821;90.600914,70.304656;91.854028,4.960717;92.119575,-8.886264;92.259444,-16.179759;91.758991,-16.160952;91.616692,-8.740708;91.358915,4.701115;90.101301,70.279660;89.727559,89.768526;89.227645,89.759230;89.601689,70.254664;90.863802,4.441513;91.113808,-8.595153;91.258539,-16.142145;90.758086,-16.123338;90.610925,-8.449597;90.368688,4.181911;89.102076,70.229668;88.727732,89.749935;88.227818,89.740640;88.602463,70.204671;89.873575,3.922309;90.108042,-8.304042;90.257634,-16.104530;89.757181,-16.085723;89.605159,-8.158486;89.378461,3.662707;88.102851,70.179675;87.727904,89.731344;87.227991,89.722049;87.603238,70.154679;88.883348,3.403106;89.102275,-8.012931;89.256728,-16.066916;88.756276,-16.048109;88.599392,-7.867375;88.388234,3.143504;87.103626,70.129683;86.728077,89.712754;86.228163,89.703458;86.604013,70.104687;87.893121,2.883902;88.096509,-7.721820;88.255823,-16.029302;87.755371,-16.010495;87.593625,-7.576264;87.398007,2.624300;86.104401,70.079690;85.728250,89.694163;85.228336,89.684867;85.604788,70.054694;86.902894,2.364698;87.090742,-7.430709;87.254918,-15.991688;86.754465,-15.972881;86.587859,-7.285153;86.407780,2.105096;85.105175,70.029698;84.728422,89.675572;84.228509,89.666277;84.605563,70.004702;85.912667,1.845495;86.084976,-7.139597;86.254013,-15.954074;85.753560,-15.935267;85.582092,-6.994042;85.417553,1.585893;84.105950,69.979706;83.728595,89.656981;83.228681,89.647686;83.606338,69.954709;84.922440,1.326291;85.079209,-6.848486;85.253108,-15.916460;84.752655,-15.897653;84.576326,-6.702931;84.427326,1.066689;83.106725,69.929713;82.728768,89.638391;82.228854,89.629095;82.607112,69.904717;83.932213,0.807087;84.073442,-6.557375;84.252202,-15.878846;83.751750,-15.860039;83.570559,-6.411820;83.437099,0.547485;82.107500,69.879721;81.728940,89.619800;81.229027,89.610505;81.607887,69.854724;82.941986,0.287884;83.067676,-6.266264;83.251297,-15.841232;82.750845,-15.822425;82.564793,-6.120709;82.446872,0.028282;81.108275,69.829728;80.729113,89.601209;80.229199,89.591914;80.608662,69.804732;81.951759,-0.231320;82.061909,-5.975153;82.250392,-15.803618;81.749939,-15.784811;81.559026,-5.829598;81.456645,-0.490922;80.109050,69.779736;79.729285,89.582618;79.229372,89.573323;79.609437,69.754740;80.961532,-0.750524;81.056143,-5.684042;81.249487,-15.766004;80.749034,-15.747197;80.553260,-5.538487;80.466418,-1.010126;79.109824,69.729743;78.729458,89.564028;78.229544,89.554732;78.610212,69.704747;79.971305,-1.269727;80.050376,-5.392931;80.248582,-15.728390;79.748129,-15.709583;79.547493,-5.247375;79.476191,-1.529329;78.110599,69.679751;77.729631,89.545437;77.229717,89.536142;77.610987,69.654755;78.981078,-1.788931;79.044610,-5.101820;79.247676,-15.690776;78.747224,-15.671969;78.541726,-4.956264;78.485964,-2.048533;77.111374,69.629758;76.729803,89.526846;76.229890,89.517551;76.611762,69.604762;77.990851,-2.308135;78.038843,-4.810709;78.246771,-15.653162;77.746319,-15.634355;77.535960,-4.665153;77.495737,-2.567737;76.112149,69.579766;75.729976,89.508256;75.230062,89.498960;75.612536,69.554770;77.000624,-2.827338;77.033077,-4.519598;77.245866,-15.615548;76.745413,-15.596741;76.530193,-4.374042;76.505510,-3.086940;75.112924,69.529774;74.730149,89.489665;74.230235,89.480370;74.613311,69.504777;76.010397,-3.346542;76.027310,-4.228487;76.244961,-15.577934;75.744508,-15.559127;75.524427,-4.082931;75.515283,-3.606144;74.113699,69.479781;73.730321,89.471074;73.230408,89.461779;73.614086,69.454785;75.020170,-3.865746;75.021543,-3.937376;75.244056,-15.540320;74.743603,-15.521513;74.525056,-4.125348;74.518660,-3.791820;73.114474,69.429789;72.730494,89.452483;72.230580,89.443188;72.614861,69.404792;74.015777,-3.646265;74.029943,-4.384949;74.243150,-15.502706;73.742698,-15.483899;73.534829,-4.644551;73.512894,-3.500709;72.115248,69.379796;71.730667,89.433893;71.230753,89.424597;71.615636,69.354800;73.010010,-3.355153;73.039716,-4.904153;73.242245,-15.465092;72.741793,-15.446285;72.544602,-5.163755;72.507127,-3.209598;71.116023,69.329804;70.730839,89.415302;70.230926,89.406007;70.616411,69.304808;72.004244,-3.064042;72.049489,-5.423357;72.241340,-15.427478;71.740887,-15.408671;71.554375,-5.682959;71.501360,-2.918487;70.116798,69.279811;69.731012,89.396711;69.231098,89.387416;69.617186,69.254815;70.998477,-2.772931;71.059262,-5.942560;71.240435,-15.389864;70.739982,-15.371057;70.564148,-6.202162;70.495594,-2.627376;69.117573,69.229819;68.731185,89.378121;68.231271,89.368825;68.617960,69.204823;69.992711,-2.481820;70.069035,-6.461764;70.239530,-15.352250;69.739077,-15.333443;69.573921,-6.721366;69.489827,-2.336265;68.118348,69.179827;67.731357,89.359530;67.231444,89.350234;67.618735,69.154830;68.986944,-2.190709;69.078808,-6.980968;69.238624,-15.314636;68.738172,-15.295829;68.583694,-7.240570;68.484061,-2.045154;67.119123,69.129834;66.731530,89.340939;66.231616,89.331644;66.619510,69.104838;67.981177,-1.899598;68.088581,-7.500171;68.237719,-15.277022;67.737267,-15.258215;67.593467,-7.759773;67.478294,-1.754043;66.119898,69.079842;65.731703,89.322348;65.231789,89.313053;65.620285,69.054845;66.975411,-1.608487;67.098354,-8.019375;67.236814,-15.239408;66.736361,-15.220601;66.603240,-8.278977;66.472528,-1.462931;65.120672,69.029849;64.731875,89.303758;64.231962,89.294462;64.621060,69.004853;65.969644,-1.317376;66.108127,-8.538579;66.235909,-15.201794;65.735456,-15.182987;65.613013,-8.798181;65.466761,-1.171820;64.121447,68.979857;63.732048,89.285167;63.232134,89.275872;63.621835,68.954861;64.963878,-1.026265;65.117900,-9.057782;65.235004,-15.164180;64.734551,-15.145373;64.622786,-9.317384;64.460994,-0.880709;63.122222,68.929864;62.732221,89.266576;62.232307,89.257281;62.622609,68.904868;63.958111,-0.735154;64.127673,-9.576986;64.234098,-15.126566;63.733646,-15.107759;63.632559,-9.836588;63.455228,-0.589598;62.122997,68.879872;61.732393,89.247986;61.232480,89.238690;61.623384,68.854876;62.952345,-0.444043;63.137446,-10.096190;63.233193,-15.088952;62.732741,-15.070145;62.642332,-10.355792;62.449461,-0.298487;61.123772,68.829879;60.732566,89.229395;60.232652,89.220099;60.624159,68.804883;61.946578,-0.152932;62.147219,-10.615393;62.232288,-15.051338;61.731835,-15.032531;61.652105,-10.874995;61.443695,-0.007376;60.124547,68.779887;59.732739,89.210804;59.232825,89.201509;59.624934,68.754891;60.940811,0.138179;61.156992,-11.134597;61.231383,-15.013724;60.730930,-14.994917;60.661878,-11.394199;60.437928,0.283735;59.125321,68.729895;58.732911,89.192213;58.232998,89.182918;58.625709,68.704898;59.935045,0.429291;60.166765,-11.653801;60.230478,-14.976110;59.730025,-14.957303;59.671651,-11.913403;59.432162,0.574846;58.126096,68.679902;57.733084,89.173623;57.233170,89.164327;57.626484,68.654906;58.929278,0.720402;59.176538,-12.173004;59.229572,-14.938496;58.729120,-14.919689;58.681424,-12.432606;58.426395,0.865957;57.126871,68.629910;56.733256,89.155032;56.233343,89.145737;56.627259,68.604913;57.923512,1.011513;58.186311,-12.692208;58.228667,-14.900882;57.728215,-14.882075;57.691197,-12.951810;57.420629,1.157068;56.127646,68.579917;55.733429,89.136441;55.233515,89.127146;55.628033,68.554921;56.917745,1.302624;57.196084,-13.211412;57.227762,-14.863268;56.727309,-14.844460;56.700971,-13.471013;56.414862,1.448179;55.128421,68.529925;54.733602,89.117850;54.233688,89.108555;54.628808,68.504929;55.911979,1.593735;56.205857,-13.730615;56.226857,-14.825653;55.726404,-14.806846;55.710744,-13.990217;55.409095,1.739290;54.129196,68.479932;53.733774,89.099260;53.233861,89.089964;53.629583,68.454936;54.906212,1.884846;55.215630,-14.249819;55.225952,-14.788039;54.725499,-14.769232;54.720517,-14.509421;54.403329,2.030401;53.129971,68.429940;52.733947,89.080669;52.234033,89.071374;52.630358,68.404944;53.900446,2.175957;54.225046,-14.750425;53.724594,-14.731618;53.397562,2.321513;52.130745,68.379948;51.734120,89.062078;51.234206,89.052783;51.631133,68.354951;52.894679,2.467068;53.224141,-14.712811;52.723689,-14.694004;52.391796,2.612624;51.131520,68.329955;50.734292,89.043488;50.234379,89.034192;50.631908,68.304959;51.888912,2.758179;52.223236,-14.675197;51.722783,-14.656390;51.386029,2.903735;50.132295,68.279963;49.734465,89.024897;49.234551,89.015602;49.632683,68.254966;50.883146,3.049290;51.222331,-14.637583;50.721878,-14.618776;50.380263,3.194846;49.133070,68.229970;48.734638,89.006306;48.234724,88.997011;48.633457,68.204974;49.877379,3.340401;50.221426,-14.599969;49.941883,-17.014992;49.792411,-18.306305;49.769382,-17.105439;49.374496,3.485957;48.133845,68.179978;47.734810,88.987715;47.234897,88.978420;47.634232,68.154982;48.871613,3.631512;49.274268,-17.365041;49.370511,-22.383640;48.948611,-26.460975;48.779155,-17.624643;48.368729,3.777068;47.134620,68.129985;46.734983,88.969125;46.235069,88.959829;46.635007,68.104989;47.865846,3.922623;48.284041,-17.884245;48.526711,-30.538309;48.104811,-34.615644;47.788928,-18.143846;47.362963,4.068179;46.135395,68.079993;45.735156,88.950534;45.235242,88.941239;45.635782,68.054997;46.860080,4.213735;47.293814,-18.403448;47.682911,-38.692978;47.261011,-42.770313;46.798701,-18.663050;46.357196,4.359290;45.136169,68.030000;44.735328,88.931943;44.235415,88.922648;44.636557,68.005004;45.854313,4.504846;46.303587,-18.922652;46.839111,-46.847647;46.417211,-50.924982;45.808474,-19.182254;45.351430,4.650401;44.136944,67.980008;43.735501,88.913353;43.235587,88.904057;43.637332,67.955012;44.848546,4.795957;45.313360,-19.441856;45.995311,-55.002317;45.573411,-59.079651;44.818247,-19.701457;44.345663,4.941512;43.137719,67.930016;42.735674,88.894762;42.235760,88.885466;42.638106,67.905019;43.842780,5.087068;44.323133,-19.961059;45.151511,-63.156986;44.729611,-67.234320;43.828020,-20.220661;43.339897,5.232623;42.138494,67.880023;41.735846,88.876171;41.235933,88.866876;41.638881,67.855027;42.837013,5.378179;43.332906,-20.480263;44.229813,-67.249655;43.729472,-67.236666;42.837793,-20.739865;42.334130,5.523734;41.139269,67.830031;40.736019,88.857580;40.236105,88.848285;40.639656,67.805034;41.831247,5.669290;42.342679,-20.999467;43.229131,-67.223677;42.728790,-67.210688;41.847566,-21.259068;41.328363,5.814845;40.140044,67.780038;39.736192,88.838990;39.236278,88.829694;39.640431,67.755042;40.825480,5.960401;41.352452,-21.518670;42.228449,-67.197699;41.728108,-67.184710;40.857339,-21.778272;40.322597,6.105957;39.140818,67.730046;38.736364,88.820399;38.236451,88.811104;38.641206,67.705050;39.819714,6.251512;40.362225,-22.037874;41.227767,-67.171721;40.727426,-67.158732;39.867112,-22.297476;39.316830,6.397068;38.141593,67.680053;37.736537,88.801808;37.236623,88.792513;37.641981,67.655057;38.813947,6.542623;39.371998,-22.557078;40.227085,-67.145743;39.726744,-67.132754;38.876885,-22.816679;38.311064,6.688179;37.142368,67.630061;36.736710,88.783218;36.236796,88.773922;36.642756,67.605065;37.808180,6.833734;38.381771,-23.076281;39.226403,-67.119765;38.726062,-67.106777;37.886658,-23.335883;37.305297,6.979290;36.143143,67.580068;35.736882,88.764627;35.236969,88.755331;35.643530,67.555072;36.802414,7.124845;37.391544,-23.595485;38.225721,-67.093788;37.725380,-67.080799;36.896431,-23.855087;36.299531,7.270401;35.143918,67.530076;34.737055,88.746036;34.237141,88.736741;34.644305,67.505080;35.796647,7.415956;36.401317,-24.114689;37.225039,-67.067810;36.724698,-67.054821;35.906204,-24.374290;35.293764,7.561512;34.144693,67.480084;33.737227,88.727445;33.237314,88.718150;33.645080,67.455087;34.790881,7.707067;35.411090,-24.633892;36.224357,-67.041832;35.724015,-67.028843;34.915977,-24.893494;34.287997,7.852623;33.145468,67.430091;32.737400,88.708855;32.237486,88.699559;32.645855,67.405095;33.785114,7.998179;34.420863,-25.153096;35.142490,-62.782491;35.223674,-67.015854;34.723333,-67.002865;34.555690,-58.261045;33.925750,-25.412698;33.282231,8.143734;32.146242,67.380099;31.737573,88.690264;31.237659,88.680969;31.646630,67.355103;32.779348,8.289290;33.430636,-25.672300;33.968889,-53.739600;34.222992,-66.989876;33.722651,-66.976888;33.382088,-49.218155;32.935523,-25.931901;32.276464,8.434845;31.147017,67.330106;30.737745,88.671673;30.237832,88.662378;30.647405,67.305110;31.773581,8.580401;32.440409,-26.191503;32.795288,-44.696710;33.222310,-66.963899;32.721969,-66.950910;32.208487,-40.175265;31.945296,-26.451105;31.270698,8.725956;30.147792,67.280114;29.737918,88.653082;29.238004,88.643787;29.648180,67.255118;30.767815,8.871512;31.450182,-26.710707;31.621686,-35.653819;32.221628,-66.937921;31.721287,-66.924932;31.034886,-31.132374;30.955069,-26.970309;30.264931,9.017067;29.148567,67.230121;28.738091,88.634492;28.238177,88.625196;28.648954,67.205125;29.762048,9.162623;30.448085,-26.610929;30.459955,-27.229911;31.220946,-66.911943;30.720605,-66.898954;29.964842,-27.489512;29.861284,-22.089484;29.259165,9.308178;28.149342,67.180129;27.738263,88.615901;27.238350,88.606606;27.649729,67.155133;28.756281,9.453734;29.274484,-17.568039;29.469728,-27.749114;30.220264,-66.885965;29.719923,-66.872976;28.974615,-28.008716;28.687683,-13.046593;28.253398,9.599289;27.150117,67.130137;26.738436,88.597310;26.238522,88.588015;26.650504,67.105140;27.750515,9.744845;28.100882,-8.525148;28.479501,-28.268318;29.219582,-66.859987;28.719241,-66.846999;27.984388,-28.527920;27.514082,-4.003703;27.247632,9.890401;26.150892,67.080144;25.738609,88.578720;25.238695,88.569424;25.651279,67.055148;26.744748,10.035956;26.927281,0.517742;27.489274,-28.787522;28.218900,-66.834010;27.718559,-66.821021;26.994161,-29.047123;26.340480,5.039187;26.241865,10.181512;25.151666,67.030152;24.738781,88.560129;24.238868,88.550834;24.652054,67.005155;25.738982,10.327067;25.753680,9.560633;26.499047,-29.306725;27.218218,-66.808032;26.717877,-66.795043;26.003934,-29.566327;25.236098,10.472623;25.166879,14.082078;24.152441,66.980159;23.738954,88.541538;23.239040,88.532243;23.652829,66.955163;24.580078,18.603523;24.733215,10.618178;25.508820,-29.825929;26.217536,-66.782054;25.717195,-66.769065;25.013707,-30.085531;24.230332,10.763734;23.993278,23.124968;23.153216,66.930167;22.739127,88.522947;22.239213,88.513652;22.653603,66.905171;23.406477,27.646413;23.727449,10.909289;24.518593,-30.345133;25.216854,-66.756076;24.716513,-66.743087;24.023480,-30.604734;23.224565,11.054845;22.819676,32.167859;22.153991,66.880174;21.739299,88.504357;21.239386,88.495061;21.654378,66.855178;22.232876,36.689304;22.721682,11.200400;23.528366,-30.864336;24.216172,-66.730098;23.715831,-66.717110;23.033253,-31.123938;22.218799,11.345956;21.646075,41.210749;21.154766,66.830182;20.739472,88.485766;20.239558,88.476471;20.655153,66.805186;21.059274,45.732194;21.715915,11.491511;22.538140,-31.383540;23.215490,-66.704121;22.715149,-66.691132;22.043026,-31.643142;21.213032,11.637067;20.472474,50.253639;20.155541,66.780189;19.739645,88.467175;19.239731,88.457880;19.655928,66.755193;19.885673,54.775085;20.710149,11.782623;21.547913,-31.902744;22.214808,-66.678143;21.714467,-66.665154;21.052799,-32.162345;20.207266,11.928178;19.298873,59.296530;19.156315,66.730197;18.739817,88.448585;18.239904,88.439289;18.656703,66.705201;18.712072,63.817975;19.704382,12.073734;20.557686,-32.421947;21.214126,-66.652165;20.713785,-66.639176;20.062572,-32.681549;19.201499,12.219289;18.157090,66.680205;18.125271,68.339420;17.739990,88.429994;17.240076,88.420698;17.538471,72.860865;17.657478,66.655208;18.698616,12.364845;19.567459,-32.941151;20.213444,-66.626187;19.713103,-66.613198;19.072345,-33.200753;18.195732,12.510400;17.157865,66.630212;16.951670,77.382311;16.740163,88.411403;16.240249,88.402108;16.364869,81.903756;16.658253,66.605216;17.692849,12.655956;18.577232,-33.460355;19.212762,-66.600209;18.712421,-66.587221;18.082118,-33.719956;17.189966,12.801511;16.158640,66.580220;15.778069,86.425201;15.740335,88.392812;15.523233,88.388776;15.240422,88.383517;15.659027,66.555224;16.687083,12.947067;17.587005,-33.979558;18.212080,-66.574232;17.711739,-66.561243;17.091891,-34.239160;16.184199,13.092622;15.159415,66.530227;14.740508,88.374222;14.240594,88.364926;14.659802,66.505231;15.681316,13.238178;16.596778,-34.498762;17.211398,-66.548254;16.711057,-66.535265;16.101664,-34.758364;15.178433,13.383733;14.160190,66.480235;13.740681,88.355631;13.240767,88.346336;13.660577,66.455239;14.675549,13.529289;15.606551,-35.017965;16.210716,-66.522276;15.710375,-66.509287;15.111437,-35.277567;14.172666,13.674845;13.160965,66.430242;12.740853,88.337040;12.240940,88.327745;12.661352,66.405246;13.669783,13.820400;14.616324,-35.537169;15.210034,-66.496298;14.709692,-66.483309;14.121210,-35.796771;13.166900,13.965956;12.161739,66.380250;11.741026,88.318450;11.241112,88.309154;11.662127,66.355254;12.664016,14.111511;13.626097,-36.056373;14.209351,-66.470320;13.709010,-66.457332;13.130983,-36.315975;12.161133,14.257067;11.162514,66.330258;10.741198,88.299859;10.241285,88.290563;10.662902,66.305261;11.658250,14.402622;12.635870,-36.575576;13.208669,-66.444343;12.708328,-66.431354;12.140756,-36.835178;11.155366,14.548178;10.163289,66.280265;9.741371,88.281268;9.241457,88.271973;9.663677,66.255269;10.652483,14.693733;11.645643,-37.094780;12.207987,-66.418365;11.707646,-66.405376;11.150529,-37.354382;10.149600,14.839289;9.164064,66.230273;8.741544,88.262677;8.241630,88.253382;8.664451,66.205276;9.646717,14.984844;10.655416,-37.613984;11.207305,-66.392387;10.706964,-66.379398;10.160302,-37.873586;9.143833,15.130400;8.164839,66.180280;7.741716,88.244087;7.241803,88.234791;7.665226,66.155284;8.640950,15.275955;9.665189,-38.133187;10.206623,-66.366409;9.706282,-66.353420;9.170075,-38.392789;8.138067,15.421511;7.165614,66.130288;6.741889,88.225496;6.241975,88.216201;6.666001,66.105292;7.635184,15.567067;8.674962,-38.652391;9.205941,-66.340431;8.705600,-66.327443;8.179848,-38.911993;7.132300,15.712622;6.166389,66.080295;5.742062,88.206905;5.242148,88.197610;5.666776,66.055299;6.629417,15.858178;7.684735,-39.171595;8.205259,-66.314454;7.704918,-66.301465;7.189621,-39.431197;6.126534,16.003733;5.167163,66.030303;4.742234,88.188314;4.242321,88.179019;4.667551,66.005307;5.623650,16.149289;6.694508,-39.690798;7.204577,-66.288476;6.704236,-66.275487;6.199394,-39.950400;5.120767,16.294844;4.167938,65.980310;3.757615,87.376701;3.410574,79.395808;3.668326,65.955314;4.617884,16.440400;5.704281,-40.210002;6.203895,-66.262498;5.703554,-66.249509;5.209167,-40.469604;4.115001,16.585955;3.168713,65.930318;3.063534,71.414916;2.824293,65.913086;2.716493,63.434023;3.612117,16.731511;4.714054,-40.729206;5.203213,-66.236520;4.702872,-66.223531;4.218940,-40.988808;3.109234,16.877066;2.369452,55.453131;2.022412,47.472238;2.606351,17.022622;3.723827,-41.248409;4.202531,-66.210542;3.702190,-66.197554;3.228713,-41.508011;2.103467,17.168177;1.675371,39.491345;1.328331,31.510453;1.600584,17.313733;2.733600,-41.767613;3.201849,-66.184565;2.701508,-66.171576;2.238486,-42.027215;1.097701,17.459289;0.981290,23.529560;0.722058,17.568015;0.634249,15.548668;1.743373,-42.286817;2.201167,-66.158587;1.700826,-66.145598;1.248259,-42.546419;0.287209,7.567775;-0.059832,-0.413117;0.753146,-42.806020;1.200485,-66.132609;0.700144,-66.119620;0.258032,-43.065622;-0.406873,-8.394010;-0.753913,-16.374902;-0.237081,-43.325224;0.199803,-66.106631;-0.300538,-66.093642;-0.732195,-43.584826;-1.100954,-24.355795;-1.447995,-32.336687;-1.227308,-43.844428;-0.800879,-66.080653;-1.301220,-66.067665;-1.722422,-44.104030;-1.795035,-40.317580;-1.965221,-44.231336;-2.142076,-48.298472;-1.801561,-66.054676;-2.301902,-66.041687;-2.489116,-56.279365
 LAND1.returnPathCoordinates=-1
 LAND1.returnPathRawCoordinates=-1
 LAND1.returnPointCoordinates=-1
-LAND1.updateTime=2025-12-26 15\:20\:50
+LAND1.updateTime=2025-12-26 15\:36\:20
 LAND1.userId=-1
diff --git a/set.properties b/set.properties
index 974962d..32eb2d1 100644
--- a/set.properties
+++ b/set.properties
@@ -1,5 +1,5 @@
 #Mower Configuration Properties - Updated
-#Fri Dec 26 15:24:54 CST 2025
+#Fri Dec 26 15:55:52 CST 2025
 appVersion=-1
 boundaryLengthVisible=false
 currentWorkLandNumber=LAND1
@@ -8,12 +8,12 @@
 handheldMarkerId=1872
 idleTrailDurationSeconds=60
 manualBoundaryDrawingMode=false
-mapScale=1.59
+mapScale=50.00
 measurementModeEnabled=false
 mowerId=6258
 serialAutoConnect=true
 serialBaudRate=115200
 serialPortName=COM15
 simCardNumber=-1
-viewCenterX=-72.81
-viewCenterY=5.47
+viewCenterX=-67.56
+viewCenterY=-10.16
diff --git a/shoudongbianjie.properties b/shoudongbianjie.properties
index 34d23f2..99426dd 100644
--- a/shoudongbianjie.properties
+++ b/shoudongbianjie.properties
@@ -1,11 +1,11 @@
 #\u624B\u52A8\u7ED8\u5236\u8FB9\u754C\u5750\u6807 - \u683C\u5F0F: x1,y1;x2,y2;...;xn,yn (\u5355\u4F4D:\u7C73,\u7CBE\u786E\u5230\u5C0F\u6570\u70B9\u540E2\u4F4D)
-#Thu Dec 25 19:00:22 CST 2025
-boundaryCoordinates=121.86,-611.32;130.67,-577.12;173.17,-587.48;167.47,-621.17
+#Fri Dec 26 15:33:26 CST 2025
+boundaryCoordinates=25.17,9.94;17.74,67.19;113.88,72.00;120.00,19.12;74.99,-4.48
 email=789
 language=zh
 lastLoginTime=-1
 password=123
-pointCount=4
+pointCount=5
 registrationTime=-1
 status=-1
 userId=-1
diff --git a/src/gecaoji/Device.java b/src/gecaoji/Device.java
index 9d1a1c3..bb96f57 100644
--- a/src/gecaoji/Device.java
+++ b/src/gecaoji/Device.java
@@ -99,7 +99,11 @@
     // 鍓茶崏鏈洪暱搴︼紝鍗曚綅绫�
     private String mowingSafetyDistance;
     // 鍓茶崏瀹夊叏璺濈锛屽崟浣嶇背
-
+    private String movement_speed = "-1"; // 杩愬姩閫熷害 km/h
+    // 澶х伅鐘舵�侊細0鍏抽棴锛�1寮�鍚�
+    private String headlight_status = "-1"; 
+    // 鍓茶崏鏈哄紑鍏崇姸鎬侊細0鐔勭伀锛�1寮�鍚�
+    private String mower_switch_status = "-1";
     private static final double METERS_PER_DEGREE_LAT = 111320.0d;
     
 
@@ -184,6 +188,9 @@
         if (mowerWidth != null) properties.setProperty("mowerWidth", mowerWidth);
         if (mowerLength != null) properties.setProperty("mowerLength", mowerLength);
         if (mowingSafetyDistance != null) properties.setProperty("mowingSafetyDistance", mowingSafetyDistance);
+        if (movement_speed != null) properties.setProperty("movement_speed", movement_speed);
+        if (headlight_status != null) properties.setProperty("headlight_status", headlight_status);
+        if (mower_switch_status != null) properties.setProperty("mower_switch_status", mower_switch_status);
         
         // 淇濆瓨鍒版枃浠�
         try (FileOutputStream output = new FileOutputStream("device.properties");
@@ -240,6 +247,9 @@
         target.mowerWidth = properties.getProperty("mowerWidth", "-1");
         target.mowerLength = properties.getProperty("mowerLength", "-1");
         target.mowingSafetyDistance = properties.getProperty("mowingSafetyDistance", "-1");
+        target.movement_speed = properties.getProperty("movement_speed", "-1");
+        target.headlight_status = properties.getProperty("headlight_status", "-1");
+        target.mower_switch_status = properties.getProperty("mower_switch_status", "-1");
     }
 
     private void applyDefaults(Device target) {
@@ -288,6 +298,9 @@
         target.mowerWidth = "-1";
         target.mowerLength = "-1";
         target.mowingSafetyDistance = "-1";
+        target.movement_speed = "-1";
+        target.headlight_status = "-1";
+        target.mower_switch_status = "-1";
     }
 
     public static synchronized Device initializeActiveDevice(String mowerId) { // 鏍规嵁璁惧ID鍒濆鍖栨椿璺冭澶�
@@ -434,6 +447,15 @@
             case "mowingSafetyDistance":
                 this.mowingSafetyDistance = value;
                 return true;
+            case "movement_speed":
+                this.movement_speed = value;
+                return true;
+            case "headlight_status":
+                this.headlight_status = value;
+                return true;
+            case "mower_switch_status":
+                this.mower_switch_status = value;
+                return true;
             default:
                 System.err.println("鏈煡瀛楁: " + fieldName);
                 return false;
@@ -1070,6 +1092,30 @@
         this.mowingSafetyDistance = mowingSafetyDistance;
     }
 
+    public String getMovement_speed() { // 鑾峰彇杩愬姩閫熷害
+        return movement_speed;
+    }
+
+    public void setMovement_speed(String movement_speed) { // 璁剧疆杩愬姩閫熷害
+        this.movement_speed = movement_speed;
+    }
+
+    public String getHeadlight_status() { // 鑾峰彇澶х伅鐘舵��
+        return headlight_status;
+    }
+
+    public void setHeadlight_status(String headlight_status) { // 璁剧疆澶х伅鐘舵��
+        this.headlight_status = headlight_status;
+    }
+
+    public String getMower_switch_status() { // 鑾峰彇鍓茶崏鏈哄紑鍏崇姸鎬�
+        return mower_switch_status;
+    }
+
+    public void setMower_switch_status(String mower_switch_status) { // 璁剧疆鍓茶崏鏈哄紑鍏崇姸鎬�
+        this.mower_switch_status = mower_switch_status;
+    }
+
     @Override
     public String toString() { // 杈撳嚭瀵硅薄淇℃伅
         return "Device{" +
@@ -1113,6 +1159,9 @@
                 ", mowerWidth='" + mowerWidth + '\'' +
                 ", mowerLength='" + mowerLength + '\'' +
                 ", mowingSafetyDistance='" + mowingSafetyDistance + '\'' +
+                ", movement_speed='" + movement_speed + '\'' +
+                ", headlight_status='" + headlight_status + '\'' +
+                ", mower_switch_status='" + mower_switch_status + '\'' +
                 '}';
     }
 }
\ No newline at end of file
diff --git a/src/lujing/MowingPathGenerationPage.java b/src/lujing/MowingPathGenerationPage.java
index 77c496c..78735ca 100644
--- a/src/lujing/MowingPathGenerationPage.java
+++ b/src/lujing/MowingPathGenerationPage.java
@@ -140,8 +140,21 @@
         contentPanel.add(createTextAreaSection(obstacleTitle, obstacleArea));
         
         // 鍓茶崏瀹藉害
-        widthField = createInfoTextField(widthValue != null ? widthValue : "", true);
-        contentPanel.add(createTextFieldSection("鍓茶崏瀹藉害 (cm)", widthField));
+        String displayWidth = "";
+        if (widthValue != null && !widthValue.trim().isEmpty() && !"-1".equals(widthValue.trim())) {
+            try {
+                double val = Double.parseDouble(widthValue.trim());
+                // 绠�鍗曠殑鍚彂寮忚浆鎹細濡傛灉鍊煎ぇ浜�5锛屽亣璁炬槸鍘樼背锛岃浆鎹负绫�
+                if (val > 5) {
+                    val = val / 100.0;
+                }
+                displayWidth = String.format(Locale.US, "%.2f", val);
+            } catch (NumberFormatException e) {
+                displayWidth = widthValue;
+            }
+        }
+        widthField = createInfoTextField(displayWidth, true);
+        contentPanel.add(createTextFieldSection("鍓茶崏瀹藉害 (m)", widthField));
         
         // 鍓茶崏瀹夊叏璺濈锛堝彧璇绘樉绀猴級
         // 浼樺厛浠嶥ikuai瀵硅薄鑾峰彇锛屽鏋淒ikuai涓病鏈夛紝鍐嶄粠Device鑾峰彇
@@ -223,9 +236,9 @@
         String sanitizedWidth = sanitizeWidthString(widthField.getText());
         if (sanitizedWidth != null) {
             try {
-                double widthCm = Double.parseDouble(sanitizedWidth);
-                widthField.setText(formatWidthForStorage(widthCm));
-                sanitizedWidth = formatWidthForStorage(widthCm);
+                double widthMeters = Double.parseDouble(sanitizedWidth);
+                widthField.setText(formatWidthForStorage(widthMeters));
+                sanitizedWidth = formatWidthForStorage(widthMeters);
             } catch (NumberFormatException ex) {
                 widthField.setText(sanitizedWidth);
             }
@@ -407,25 +420,25 @@
         String rawWidthInput = widthField.getText() != null ? widthField.getText().trim() : "";
         String widthSanitized = sanitizeWidthString(widthField.getText());
         if (widthSanitized == null) {
-                String message = rawWidthInput.isEmpty() ? "璇峰厛璁剧疆鍓茶崏瀹藉害(cm)" : "鍓茶崏瀹藉害鏍煎紡涓嶆纭�";
+                String message = rawWidthInput.isEmpty() ? "璇峰厛璁剧疆鍓茶崏瀹藉害(m)" : "鍓茶崏瀹藉害鏍煎紡涓嶆纭�";
             JOptionPane.showMessageDialog(this, message, "鎻愮ず", JOptionPane.WARNING_MESSAGE);
             return;
         }
         
-        double widthCm;
+        double widthMeters;
         try {
-            widthCm = Double.parseDouble(widthSanitized);
+            widthMeters = Double.parseDouble(widthSanitized);
         } catch (NumberFormatException ex) {
             JOptionPane.showMessageDialog(this, "鍓茶崏瀹藉害鏍煎紡涓嶆纭�", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
             return;
         }
         
-        if (widthCm <= 0) {
+        if (widthMeters <= 0) {
             JOptionPane.showMessageDialog(this, "鍓茶崏瀹藉害蹇呴』澶т簬0", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
             return;
         }
         
-        String widthNormalized = formatWidthForStorage(widthCm);
+        String widthNormalized = formatWidthForStorage(widthMeters);
         widthField.setText(widthNormalized);
         
         String pathNormalized = normalizeCoordinateInput(pathArea.getText());
@@ -518,15 +531,15 @@
         String widthStr = sanitizeWidthString(widthCmInput);
         if (widthStr == null) {
             if (showMessages) {
-                String message = rawWidth.isEmpty() ? "璇峰厛璁剧疆鍓茶崏瀹藉害(cm)" : "鍓茶崏瀹藉害鏍煎紡涓嶆纭�";
+                String message = rawWidth.isEmpty() ? "璇峰厛璁剧疆鍓茶崏瀹藉害(m)" : "鍓茶崏瀹藉害鏍煎紡涓嶆纭�";
                 JOptionPane.showMessageDialog(parentComponent, message, "鎻愮ず", JOptionPane.WARNING_MESSAGE);
             }
             return null;
         }
         
-        double widthCm;
+        double widthVal;
         try {
-            widthCm = Double.parseDouble(widthStr);
+            widthVal = Double.parseDouble(widthStr);
         } catch (NumberFormatException ex) {
             if (showMessages) {
                 JOptionPane.showMessageDialog(parentComponent, "鍓茶崏瀹藉害鏍煎紡涓嶆纭�", 
@@ -535,7 +548,7 @@
             return null;
         }
         
-        if (widthCm <= 0) {
+        if (widthVal <= 0) {
             if (showMessages) {
                 JOptionPane.showMessageDialog(parentComponent, "鍓茶崏瀹藉害蹇呴』澶т簬0", 
                     "鎻愮ず", JOptionPane.WARNING_MESSAGE);
@@ -543,7 +556,7 @@
             return null;
         }
         
-        double widthMeters = widthCm / 100.0d;
+        double widthMeters = widthVal;
         String plannerWidth = BigDecimal.valueOf(widthMeters)
             .setScale(3, RoundingMode.HALF_UP)
             .stripTrailingZeros()
@@ -1081,11 +1094,8 @@
         return cleaned.isEmpty() ? null : cleaned;
     }
     
-    private String formatWidthForStorage(double widthCm) {
-        return BigDecimal.valueOf(widthCm)
-            .setScale(2, RoundingMode.HALF_UP)
-            .stripTrailingZeros()
-            .toPlainString();
+    private String formatWidthForStorage(double widthVal) {
+        return String.format(Locale.US, "%.2f", widthVal);
     }
     
     private String formatMowingPatternForDialog(String patternValue) {
diff --git a/src/lujing/YixinglujingHaveObstacel.java b/src/lujing/YixinglujingHaveObstacel.java
index 2a36445..ff0736a 100644
--- a/src/lujing/YixinglujingHaveObstacel.java
+++ b/src/lujing/YixinglujingHaveObstacel.java
@@ -6,8 +6,11 @@
 import java.util.List;
 
 /**
- * 寮傚舰鑽夊湴璺緞瑙勫垝 - 閬块殰澧炲己鐗� V7.0
- * 浼樺寲锛氬鍔犱簡澶氳竟褰㈠鎵╃ǔ瀹氭�с�侀殰纰嶇墿纰版挒棰勫垽浠ュ強鍐椾綑璺緞娑堥櫎銆�
+ * 寮傚舰鑽夊湴璺緞瑙勫垝 - 閬块殰澧炲己鐗� V8.0
+ * 淇璇存槑锛�
+ * 1. 淇浜嗗湴鍧楀唴缂╁拰闅滅鐗╁鎵╃殑姝h礋閫昏緫銆�
+ * 2. 浼樺寲浜嗗杈瑰舰鍋忕Щ绠楁硶锛岀‘淇濋�嗘椂閽堢偣搴忎笅姝e�煎唴缂╋紝璐熷�煎鎵┿��
+ * 3. 澧炲己浜嗛殰纰嶇墿瑙f瀽鐨勫仴澹�с��
  */
 public class YixinglujingHaveObstacel {
 
@@ -18,32 +21,99 @@
         double mowWidth = Double.parseDouble(widthStr);
         double safeMargin = Double.parseDouble(marginStr);
 
-        // 1. 棰勫鐞嗗湴鍧楋紙纭繚閫嗘椂閽堬級
+        // 1. 棰勫鐞嗗湴鍧楋紙纭繚閫嗘椂閽堥『搴忥級
         ensureCounterClockwise(rawPoints);
-        List<Point> boundary = getOffsetPolygon(rawPoints, -safeMargin); // 鍐呯缉
+        
+        // 銆愭牳蹇冧慨澶嶃�戯細瀵逛簬閫嗘椂閽堝杈瑰舰锛屾鏁版槸鍚戝唴鍋忕Щ锛圛nset锛�
+        List<Point> boundary = getOffsetPolygon(rawPoints, safeMargin); 
         if (boundary.size() < 3) return new ArrayList<>();
 
-        // 2. 瑙勫垝鍩虹璺緞 (鏃犻殰纰嶇墿鐘舵��)
+        // 2. 纭畾鏈�浼樿搴﹀苟瑙勫垝鍩虹璺緞
         double bestAngle = findOptimalAngle(boundary);
         Point firstScanStart = getFirstScanPoint(boundary, mowWidth, bestAngle);
         List<Point> alignedBoundary = alignBoundaryStart(boundary, firstScanStart);
 
         List<PathSegment> baseLines = new ArrayList<>();
-        // 绗竴闃舵锛氬洿杈�
+        // 绗竴闃舵锛氬洿杈硅矾寰�
         for (int i = 0; i < alignedBoundary.size(); i++) {
             baseLines.add(new PathSegment(alignedBoundary.get(i), alignedBoundary.get((i + 1) % alignedBoundary.size()), true));
         }
-        // 绗簩闃舵锛氬唴閮ㄦ壂鎻�
+        // 绗簩闃舵锛氱敓鎴愬唴閮ㄦ壂鎻忚矾寰�
         Point lastEdgePos = alignedBoundary.get(0);
         baseLines.addAll(generateGlobalScanPath(boundary, mowWidth, bestAngle, lastEdgePos));
 
-        // 3. 澶勭悊闅滅鐗╋細瑙f瀽骞舵墽琛屽鎵� (闅滅鐗╅渶鍚戝鎵� margin)
+        // 3. 澶勭悊闅滅鐗╋細瑙f瀽骞舵墽琛屻�愬鎵┿��
+        // 銆愭牳蹇冧慨澶嶃�戯細瀵逛簬閫嗘椂閽堥殰纰嶇墿锛岃礋鏁版槸鍚戝鍋忕Щ锛圤utset锛�
         List<Obstacle> obstacles = parseObstacles(obstaclesStr, safeMargin);
 
         // 4. 璺緞瑁佸壀涓庝紭鍖栬繛鎺�
         return optimizeAndClipPath(baseLines, obstacles);
     }
 
+    private static List<Obstacle> parseObstacles(String obsStr, double margin) {
+        List<Obstacle> obstacles = new ArrayList<>();
+        if (obsStr == null || obsStr.trim().isEmpty()) return obstacles;
+        
+        for (String group : obsStr.split("\\$")) {
+            List<Point> pts = parseCoordinates(group);
+            if (pts.isEmpty()) continue;
+            
+            if (pts.size() == 2) {
+                // 鍦嗗舰闅滅鐗╋細绗竴涓偣蹇冿紝绗簩涓偣涓婁竴鐐癸紝鍗婂緞澧炲姞 margin
+                double r = Math.hypot(pts.get(0).x - pts.get(1).x, pts.get(0).y - pts.get(1).y);
+                obstacles.add(new CircleObstacle(pts.get(0), r + margin));
+            } else if (pts.size() > 2) {
+                // 澶氳竟褰㈤殰纰嶇墿锛氱‘淇濋�嗘椂閽堬紝鐒跺悗浣跨敤璐� margin 杩涜銆愬鎵┿��
+                ensureCounterClockwise(pts);
+                obstacles.add(new PolyObstacle(getOffsetPolygon(pts, -margin)));
+            }
+        }
+        return obstacles;
+    }
+
+    /**
+     * 澶氳竟褰㈠亸绉荤畻娉曪細鍩轰簬瑙掑钩鍒嗙嚎鍋忕Щ
+     * 鍦ㄩ�嗘椂閽堥『搴忎笅锛歰ffset > 0 涓哄唴缂╋紝offset < 0 涓哄鎵�
+     */
+    private static List<Point> getOffsetPolygon(List<Point> points, double offset) {
+        List<Point> result = new ArrayList<>();
+        int n = points.size();
+        for (int i = 0; i < n; i++) {
+            Point p1 = points.get((i - 1 + n) % n);
+            Point p2 = points.get(i);
+            Point p3 = points.get((i + 1) % n);
+            
+            double v1x = p2.x - p1.x, v1y = p2.y - p1.y;
+            double v2x = p3.x - p2.x, v2y = p3.y - p2.y;
+            double l1 = Math.hypot(v1x, v1y), l2 = Math.hypot(v2x, v2y);
+            
+            if (l1 < 1e-6 || l2 < 1e-6) continue;
+
+            // 鑾峰彇涓ゆ潯杈圭殑娉曞悜閲忥紙鍚戝乏鍋忕Щ锛�
+            double n1x = -v1y / l1, n1y = v1x / l1;
+            double n2x = -v2y / l2, n2y = v2x / l2;
+
+            // 瑙掑钩鍒嗙嚎鍚戦噺
+            double bx = n1x + n2x, by = n1y + n2y;
+            double bl = Math.hypot(bx, by);
+            if (bl < 1e-6) { 
+                bx = n1x; by = n1y; 
+            } else { 
+                bx /= bl; by /= bl; 
+            }
+
+            // 璁$畻鍋忕Щ闀垮害淇绯绘暟锛�1/sin(theta/2)
+            double cosHalf = n1x * bx + n1y * by;
+            double d = offset / Math.max(cosHalf, 0.1); // 閬垮厤鍒嗘瘝杩囧皬瀵艰嚧鏃犵┓澶�
+            
+            // 闄愬埗鏈�澶т綅绉婚噺锛岄槻姝㈡瀬灏栬鐣稿彉
+            d = Math.signum(offset) * Math.min(Math.abs(d), Math.abs(offset) * 5);
+
+            result.add(new Point(p2.x + bx * d, p2.y + by * d));
+        }
+        return result;
+    }
+
     private static List<PathSegment> optimizeAndClipPath(List<PathSegment> originalPath, List<Obstacle> obstacles) {
         List<PathSegment> result = new ArrayList<>();
         Point currentPos = null;
@@ -52,6 +122,7 @@
             List<PathSegment> clipped = new ArrayList<>();
             clipped.add(segment);
 
+            // 鐢ㄦ瘡涓�涓殰纰嶇墿渚濇瑁佸壀
             for (Obstacle obs : obstacles) {
                 List<PathSegment> nextIter = new ArrayList<>();
                 for (PathSegment s : clipped) {
@@ -61,11 +132,11 @@
             }
 
             for (PathSegment s : clipped) {
-                // 浼樺寲鐐癸細娑堥櫎闀垮害鍑犱箮涓�0鐨勬棤鏁堢嚎娈�
+                // 鍓旈櫎寰皬娈�
                 if (Math.hypot(s.start.x - s.end.x, s.start.y - s.end.y) < 1e-4) continue;
 
+                // 濡傛灉鏂版鐨勮捣鐐逛笌涓婃鐨勭粓鐐逛笉杩炶疮锛屾坊鍔犵┖璧帮紙闈炲壊鑽夛級璺緞
                 if (currentPos != null && Math.hypot(currentPos.x - s.start.x, currentPos.y - s.start.y) > 0.01) {
-                    // 娣诲姞绌鸿浇璺緞
                     result.add(new PathSegment(currentPos, s.start, false));
                 }
                 result.add(s);
@@ -75,7 +146,7 @@
         return result;
     }
 
-    // --- 闅滅鐗╂ā鍨� ---
+    // --- 闅滅鐗╃被瀹氫箟 ---
     abstract static class Obstacle {
         abstract boolean isInside(Point p);
         abstract List<PathSegment> clipSegment(PathSegment seg);
@@ -87,7 +158,6 @@
 
         public PolyObstacle(List<Point> pts) {
             this.points = pts;
-            // 棰勮绠� AABB 杈圭晫妗嗘彁鍗囨晥鐜�
             minX = minY = Double.MAX_VALUE;
             maxX = maxY = -Double.MAX_VALUE;
             for (Point p : pts) {
@@ -121,6 +191,7 @@
             for (int i = 0; i < ts.size() - 1; i++) {
                 Point s = interpolate(seg.start, seg.end, ts.get(i));
                 Point e = interpolate(seg.start, seg.end, ts.get(i + 1));
+                // 妫�鏌ヤ腑鐐规槸鍚﹀湪闅滅鐗╁唴
                 if (!isInside(new Point((s.x + e.x) / 2, (s.y + e.y) / 2))) {
                     res.add(new PathSegment(s, e, seg.isMowing));
                 }
@@ -162,57 +233,7 @@
         }
     }
 
-    // --- 绠楁硶宸ュ叿绫� ---
-
-    private static List<Obstacle> parseObstacles(String obsStr, double margin) {
-        List<Obstacle> obstacles = new ArrayList<>();
-        if (obsStr == null || obsStr.trim().isEmpty()) return obstacles;
-        for (String group : obsStr.split("\\$")) {
-            List<Point> pts = parseCoordinates(group);
-            if (pts.size() == 2) {
-                double r = Math.hypot(pts.get(0).x - pts.get(1).x, pts.get(0).y - pts.get(1).y);
-                obstacles.add(new CircleObstacle(pts.get(0), r + margin));
-            } else if (pts.size() > 2) {
-                ensureCounterClockwise(pts);
-                // 澶氳竟褰㈠鎵╋細offset 涓烘
-                obstacles.add(new PolyObstacle(getOffsetPolygon(pts, margin)));
-            }
-        }
-        return obstacles;
-    }
-
-    /**
-     * 浼樺寲鍚庣殑澶氳竟褰㈠鎵�/鍐呯缉绠楁硶
-     * @param offset 姝f暟涓哄鎵╋紝璐熸暟涓哄唴缂�
-     */
-    private static List<Point> getOffsetPolygon(List<Point> points, double offset) {
-        List<Point> result = new ArrayList<>();
-        int n = points.size();
-        for (int i = 0; i < n; i++) {
-            Point p1 = points.get((i - 1 + n) % n), p2 = points.get(i), p3 = points.get((i + 1) % n);
-            
-            double v1x = p2.x - p1.x, v1y = p2.y - p1.y;
-            double v2x = p3.x - p2.x, v2y = p3.y - p2.y;
-            double l1 = Math.hypot(v1x, v1y), l2 = Math.hypot(v2x, v2y);
-            
-            if (l1 < 1e-6 || l2 < 1e-6) continue;
-
-            // 娉曞悜閲�
-            double n1x = -v1y / l1, n1y = v1x / l1;
-            double n2x = -v2y / l2, n2y = v2x / l2;
-
-            // 瑙掑钩鍒嗙嚎
-            double bx = n1x + n2x, by = n1y + n2y;
-            double bl = Math.hypot(bx, by);
-            if (bl < 1e-6) { bx = n1x; by = n1y; } else { bx /= bl; by /= bl; }
-
-            // 淇璺濈
-            double sinHalf = n1x * bx + n1y * by;
-            double d = offset / Math.max(sinHalf, 0.1);
-            result.add(new Point(p2.x + bx * d, p2.y + by * d));
-        }
-        return result;
-    }
+    // --- 鍐呴儴绠楁硶涓庢暟瀛︽敮鎸� ---
 
     private static List<PathSegment> generateGlobalScanPath(List<Point> polygon, double width, double angle, Point currentPos) {
         List<PathSegment> segments = new ArrayList<>();
@@ -250,7 +271,6 @@
         return segments;
     }
 
-    // --- 鍩虹鏁板鍑芥暟 ---
     private static double getIntersectionT(Point a, Point b, Point c, Point d) {
         double ux = b.x - a.x, uy = b.y - a.y, vx = d.x - c.x, vy = d.y - c.y;
         double det = vx * uy - vy * ux;
@@ -263,7 +283,8 @@
     }
 
     private static Point rotatePoint(Point p, double ang) {
-        return new Point(p.x * Math.cos(ang) - p.y * Math.sin(ang), p.x * Math.sin(ang) + p.y * Math.cos(ang));
+        double cos = Math.cos(ang), sin = Math.sin(ang);
+        return new Point(p.x * cos - p.y * sin, p.x * sin + p.y * cos);
     }
 
     private static List<Double> getXIntersections(List<Point> poly, double y) {
@@ -304,20 +325,22 @@
         for (int i = 0; i < poly.size(); i++) {
             Point p1 = poly.get(i), p2 = poly.get((i + 1) % poly.size());
             double a = Math.atan2(p2.y - p1.y, p2.x - p1.x);
-            double h = 0, miY = Double.MAX_VALUE, maY = -Double.MAX_VALUE;
+            double miY = Double.MAX_VALUE, maY = -Double.MAX_VALUE;
             for (Point p : poly) {
                 Point r = rotatePoint(p, -a);
                 miY = Math.min(miY, r.y); maY = Math.max(maY, r.y);
             }
-            h = maY - miY;
-            if (h < minH) { minH = h; bestA = a; }
+            if (maY - miY < minH) { minH = maY - miY; bestA = a; }
         }
         return bestA;
     }
 
     private static void ensureCounterClockwise(List<Point> pts) {
         double s = 0;
-        for (int i = 0; i < pts.size(); i++) s += (pts.get((i + 1) % pts.size()).x - pts.get(i).x) * (pts.get((i + 1) % pts.size()).y + pts.get(i).y);
+        for (int i = 0; i < pts.size(); i++) {
+            Point p1 = pts.get(i), p2 = pts.get((i + 1) % pts.size());
+            s += (p2.x - p1.x) * (p2.y + p1.y);
+        }
         if (s > 0) Collections.reverse(pts);
     }
 
diff --git a/src/set/Sets.java b/src/set/Sets.java
index bbc0160..020f3f4 100644
--- a/src/set/Sets.java
+++ b/src/set/Sets.java
@@ -903,7 +903,7 @@
         }
         updateDisplay();
         // 鍔犺浇骞跺簲鐢ㄤ笂娆′繚瀛樼殑瑙嗗浘涓績鍧愭爣
-        loadViewCenterFromProperties();
+        // loadViewCenterFromProperties(); // 绉婚櫎姝よ皟鐢紝閬垮厤鎵撳紑璁剧疆椤甸潰鏃堕噸缃湴鍥捐鍥�
     }
     
     /**

--
Gitblit v1.10.0