{"id":162,"date":"2008-12-18T21:26:00","date_gmt":"2008-12-18T01:26:00","guid":{"rendered":""},"modified":"2013-11-18T21:44:21","modified_gmt":"2013-11-18T13:44:21","slug":"cehui-pas-%e5%be%85%e7%bb%ad","status":"publish","type":"post","link":"https:\/\/kyle.ai\/blog\/162.html","title":{"rendered":"Cehui.pas&#8212;\u5f85\u7eed"},"content":{"rendered":"<pre class=\"brush: delphi; title: ; notranslate\" title=\"\">\r\nunit Cehui;\r\n{-----------------------------------\r\n          == \u25ce\u25ce\u25ce   \u4f5c\u8005\uff1a\u9648\u660e(\u9f99\u5728\u5929) \u25ce\u25ce\u25ce ==\r\n                  QQ:810492306\r\n\r\n\u6ce8\uff1a\u672c\u7a0b\u5e8f\u7ea6\u5b9a\u5199\u6cd5--&gt;60\u5ea620\u520630\u79d2\u5199\u4e3a60.20.30\r\n    30.20.10\u4e3a30\u5ea620\u520610\u79d2\r\n    \u5176\u5b83\u5c0f\u6570\u5199\u6cd5\u5747\u4e3a\u5f27\u5ea6\u503c\r\n    \u5404\u4e2a\u51fd\u6570\u7684\u53c2\u6570\u5747\u4ee5\u5f27\u5ea6\u503c\u4e3a\u5b9e\u53c2\r\n------------------------------------}\r\n\r\ninterface\r\nuses Math,SysUtils;\r\n\r\ntype Point=record                               \/\/\u70b9\u5750\u6807\u7684\u8bb0\u5f55\u7c7b\u578b\r\n         x:single;\r\n         y:single;\r\n         end;\r\n\r\n\/\/*****************\u524d\u65b9\u4ea4\u4f1a\u7684\u8ba1\u7b97,\u6839\u636eAB\u4e24\u70b9\u7684\u5750\u6807\u548c\u4e24\u4e2a\u89d2\u6c42P\u70b9\u7684\u5750\u6807**********\r\nfunction FrontCross(A,B:Point;a_bear,b_bear:single):Point;\r\n\/\/*****************\u6d4b\u8fb9\u4ea4\u4f1a\u7684\u8ba1\u7b97,\u5df2\u77e5A,B,ap\u957f,bp\u957f,\u6c42P\u3002P\u70b9\u5728A,B\u4e0b\u4fa7\u5219fm=1;\u5728\u4e0a\u4fa7\u5219fm=-1,xx\u4e3aAB\u6d4b\u7ed8\u8c61\u9650\u5e8f\u53f7\r\nfunction SidesCross(A,B:Point;ap,bp:single;fm,xx:integer):Point;\r\n\/\/*****************\u5c06\u89d2\u5ea6\u8f6c\u6362\u6210\u5f27\u5ea6\u598260.30.20(60\u5ea630\u520620\u79d2)\u5316\u6210\u5f27\u5ea61.056*******\r\nfunction MyDegToRad(Deg:string):single;\r\n\/\/*****************\u5c06\u5f27\u5ea6\u8f6c\u6362\u6210\u89d2\u5ea6,\u59823\u8f6c\u6362\u6210171\u5ea653\u520614\u79d2,171.53.14***********\r\nfunction MyRadToDeg(Rad:single):string;\r\n\/\/*****************\u5947\u8fdb\u5076\u4e0d\u8fdb\u7b97\u6cd5\u51fd\u6570******************************************\r\nfunction JustifyFloat(float1:single):integer;\r\n\/\/*****************\u5750\u6807\u6b63\u7b97\u51fd\u6570,\u5df2\u77e5A,AB\u8ddd\u79bb,AB\u5750\u6807\u65b9\u4f4d\u89d2,\u6c42B******************\r\nfunction RCalCoordinate(A:Point;Sab:single;ab_bear:single):Point;\r\n\/\/*****************\u5750\u6807\u53cd\u7b97\u51fd\u6570,\u5df2\u77e5A,B\u6c42AB\u65b9\u4f4d\u89d2\u548cSab,xx\u4e3aAB\u6d4b\u7ed8\u8c61\u9650\u5e8f\u53f7******\r\nfunction LCalCoordinate(A,B:Point;var ab_bear:single;xx:integer):single;\/\/\u987a\u4fbf\u8fd4\u56de ab_bear\r\n\/\/*****************\u5c06\u5f27(\u89d2)\u5ea6\u5ea6\u5316\u52300\u52302*Pi\u4e4b\u95f4,\u7ea0\u6b63\u89d2\u5ea6\u8303\u56f4********************\r\nfunction JustifyBear(bear:single):single;overload;\r\nfunction JustifyBear(bear:string):string;overload;\r\n\/\/*****************\u4f59\u5f26\u51fd\u6570\u6c42\u89d2\u503c,\u5df2\u77e5\u4e09\u8fb9\u957fa,b,c\u5176\u4e2dc\u4e3a\u6b32\u6c42\u89d2\u7684\u5bf9\u8fb9***********\r\nfunction YuXianFunc(a,b,c:single):single;\r\n\/\/*****************\u5df2\u77e5A,B\u5750\u6807\u6c42AB\u957f\u5ea6*****************************************\r\nfunction CalABLong(A,B:Point):single;\r\n\/\/*****************\u7531A,B\u4e24\u70b9\u5750\u6807\u5224\u65adAB\u662f\u5728\u6d4b\u7ed8\u5750\u6807\u7cfb\u4e2d\u54ea\u8c61\u9650*******************\r\nfunction JudgeABXX(A,B:Point):integer;\r\n\/\/*****************\u7531A,B\u5750\u6807\u8ba1\u7b97AB\u7684\u65b9\u4f4d\u89d2\uff0cxx,\u8c61\u9650,FW,\u65b9\u4f4d********************\r\nfunction CalAB_FWbear(A,B:Point):single;\r\n\/\/*****************\u6b63\u5f26\u51fd\u6570\u6c42\u8fb9\u957f,\u5df2\u77e5a\u8fb9\u548cA,B\u89d2*******************************\r\nfunction ZhengXianFunc(a:single;a_bear,b_bear:single):single;\r\n\/\/*****************\u5c06\u89d2\u5ea6\u8f6c\u6362\u6210\u79d2\u503c\uff0c\u598230.20.10\u8f6c\u6362\u6210\u79d2\u503c**********************\r\nfunction CoordinateToSeconds(Deg:string):single;\r\n\/\/*****************\u5c06\u79d2\u503c\u8f6c\u6362\u6210\u89d2\u5ea6\u503c******************************************\r\nfunction SecondsToCoordinate(Se:single):string;\r\n\/\/*****************\u4e24\u4e2a\u89d2(30.20.10\u7684\u5f62\u5f0f)\uff0c\u52a0\u51cf\u6cd5\u8fd0\u7b97,1234\u5206\u522b\u4e3a\u52a0\u51cf\u4e58\u9664*******\r\nfunction CoordinateAddAndSub(A,B:string;i:integer):string;\r\n\/\/*****************\u5c0f\u6570\u8f6c\u5206\u6570**************************************************\r\nfunction Fraction(decimal: double): string;\r\n\r\nimplementation\r\n\/\/================================\u5c0f\u6570\u8f6c\u5206\u6570===================================\r\nfunction Fraction(decimal: double): string;\r\nvar\r\nintNumerator, intDenominator, intNegative: integer; \/\/ \u58f0\u660e\u6574\u6570\u53d8\u91cf\u4e3a\u957f\u6574\u6570\r\ndblFraction, dblDecimal, dblAccuracy, dblinteger: Double; \/\/ \u58f0\u660e\u6d6e\u70b9\u6570\u4e3a\u53cc\u7cbe\u5ea6\r\ntemp:string;\r\nbegin\r\ndblDecimal := decimal; \/\/\u53d6\u5f97\u76ee\u6807\u5c0f\u6570\r\nif trunc(decimal) = decimal then \/\/ \u5982\u679c\u662f\u6574\u6570\uff0c\u5219\u76f4\u8f6c\r\n    result := floattostr(decimal)\r\nelse\r\nbegin\r\n    if abs(decimal) &gt; 1 then \/\/\u5982\u679c\u5c0f\u6570\u5927\u4e8e1 \u5982 10.24 \uff0c\u8fdb\u884c\u62c6\u89e3\r\n    begin\r\n      dblinteger := trunc(decimal); \/\/\u53d6\u51fa\u6574\u6570\u90e8\u5206\r\n      dblDecimal := abs(frac(decimal)); \/\/\u53d6\u51fa\u5c0f\u6570\u90e8\u5206\r\n    end\r\n    else dblDecimal := decimal;\r\n\r\n    dblAccuracy := 0.01; \/\/\u8bbe\u7f6e\u7cbe\u5ea6\r\n    intNumerator := 0; \/\/\u521d\u59cb\u5206\u5b50\u4e3a0\r\n    intDenominator := 1; \/\/\u521d\u59cb\u5206\u6bcd\u4e3a1\r\n    intNegative := 1; \/\/\u7b26\u53f7\u6807\u8bb0\u4e3a\u6b63\r\n    if dblDecimal &lt; 0 then intNegative := -1; \/\/\u5982\u679c\u76ee\u6807\u4e3a\u8d1f\uff0c\u8bbe\u7f6e\u8d1f\u6807\u5fd7\u4f4d\r\n    dblFraction := 0; \/\/\u8bbe\u7f6e\u5206\u6570\u503c\u4e3a 0\/1\r\n    while Abs(dblFraction - dblDecimal) &gt; dblAccuracy do \/\/\u5982\u679c\u5f53\u524d\u6ca1\u6709\u8fbe\u5230\u7cbe\u5ea6\u8981\u6c42\u5c31\u7ee7\u7eed\u5faa\u73af\r\n    begin\r\n      if Abs(dblFraction) &gt; Abs(dblDecimal) then \/\/\u5982\u679c\u6211\u4eec\u7684\u5206\u6570\u5927\u4e8e\u76ee\u6807\r\n        intDenominator := intDenominator + 1 \/\/\u589e\u52a0\u5206\u6bcd\r\n      else \/\/\u5426\u5219\r\n        intNumerator := intNumerator + intNegative; \/\/\u589e\u52a0\u5206\u5b50\r\n      dblFraction := intNumerator \/ intDenominator; \/\/\u8ba1\u7b97\u65b0\u7684\u5206\u6570\r\n    end;\r\n   \/\/ edit2.Text := inttostr(intNumerator) + '\/' + inttostr(intDenominator);\r\n    if abs(decimal) &gt; 1 then \/\/\u5982\u679c\u5c0f\u6570\u5927\u4e8e1 \u5982 10.24 \uff0c\u8fdb\u884c\u62c6\u89e3\r\n     \/\/\u7ed3\u679c\uff1adblinteger\u4e3a\u6574\u6570\u90e8\u5206\uff0c intNumerator\u4e3a\u5206\u5b50\uff0cintDenominator\u4e3a\u5206\u6bcd\r\n     begin\r\n     if dblinteger&lt;0 then   \/\/\u5982\u679c\u4e3a\u8d1f\u6570\r\n       begin dblinteger := -dblinteger;\r\n       temp := floattostr(dblinteger*intDenominator+intNumerator) + '\/' + inttostr(intDenominator);\r\n       \/\/result := floattostr(dblinteger) + '\u53c8' + inttostr(intNumerator) + '\/' + inttostr(intDenominator)\r\n       result := '-'+temp;\r\n       end else\r\n       begin\r\n       temp := floattostr(dblinteger*intDenominator+intNumerator) + '\/' + inttostr(intDenominator);\r\n       result :=temp;\r\n       end;\r\n     end\r\n    else\r\n      result := inttostr(intNumerator) + '\/' + inttostr(intDenominator);\r\nend;\r\nend;\r\n\r\n\/\/============================\u524d\u65b9\u4ea4\u4f1a\u7684\u8ba1\u7b97(\u9006\u65f6\u9488)===========================\r\nfunction FrontCross(A,B:Point;a_bear,b_bear:single):Point;\r\nvar P:Point;\r\nbegin\r\n    p.x:=(A.x*cot(b_bear)+B.x*cot(a_bear)+(B.y-A.y))\/(cot(a_bear)+cot(b_bear));\r\n    p.y:=(A.y*cot(b_bear)+B.y*cot(a_bear)-(B.x-A.x))\/(cot(a_bear)+cot(b_bear));\r\n    result:=P;\r\nend;\r\n\r\n\/\/========================\u5c06\u89d2\u5ea6\u8f6c\u6362\u6210\u5f27\u5ea6\u598260.30.20(60\u5ea630\u520620\u79d2)\u5316\u6210\u5f27\u5ea61.056\r\nfunction MyDegToRad(Deg:string):single;\r\nvar sum:single;\r\nbegin\r\n   sum:=CoordinateToSeconds(Deg);\r\n   result:=sum\/(180*3600)*Pi;\r\nend;\r\n\r\n\/\/=============================\u5947\u8fdb\u5076\u4e0d\u8fdb\u7b97\u6cd5\u51fd\u6570==============================\r\nfunction JustifyFloat(float1:single):integer;\r\nvar temp:integer;\r\nbegin\r\n    result:=0;\r\n    temp:=trunc(float1*2);\r\n    if float1&lt;0 then temp:=trunc(-float1*2);         \/\/\u5982\u679c\u76ee\u6807\u6570\u4e3a\u8d1f\u6570\r\n    if odd(temp) then   \/\/\u5947\u8fdb\u5076\u4e0d\u8fdb\r\n       begin\r\n         if (temp mod 4)=1 then result:=temp div 2\r\n         else if (temp mod 4)=3 then result:=(temp+1) div 2;\r\n       end\r\n    else\r\n       begin\r\n         result:=temp div 2;\r\n       end;\r\n    if float1&lt;0 then result:=-result;\r\nend;\r\n\r\n\/\/============================\u5c06\u5f27\u5ea6\u8f6c\u6362\u6210\u89d2\u5ea6,\u59823\u8f6c\u6362\u6210171\u5ea653\u520614\u79d2,171.53.14\r\nfunction MyRadToDeg(Rad:single):string;\r\nvar temp1,temp2,temp3:single;\r\n    str1,str2,str3:string;\r\nbegin\r\n     temp1:=Rad\/Pi*180;\r\n     if Rad&lt;0 then temp1:=-Rad\/Pi*180;          \/\/\u5982\u679c\u4e3a\u8d1f\u6570\r\n     str1:=IntToStr(Floor(temp1));              \/\/\u53d6\u6574 147\r\n     temp2:=Frac(temp1)*60;                     \/\/Frac\u53d6\u5c0f\u6570\u90e8\u5206,\r\n     str2:=IntToStr(Floor(temp2));              \/\/\u7b97\u5206\u503c\r\n     temp3:=Frac(temp2)*60;\r\n     str3:=IntToStr(Round(temp3));              \/\/Round\u56db\u820d\u4e94\u5165,\u7b97\u79d2\u503c\r\n     result:=str1+'.'+str2+'.'+str3;            \/\/\u5ea6.\u5206.\u79d2 \u7684\u5f62\u5f0f\u8f93\u51fa\r\n     if Rad&lt;0 then result:='-'+result;\r\nend;\r\n\r\n\/\/========================\u5750\u6807\u6b63\u7b97\u51fd\u6570,\u5df2\u77e5A,AB\u8ddd\u79bb,AB\u5750\u6807\u65b9\u4f4d\u89d2,\u6c42B===========\r\nfunction RCalCoordinate(A:Point;Sab:single;ab_bear:single):Point;\r\nvar B:Point;\r\nbegin\r\n    B.x:=A.x+Sab*Cos(ab_bear);\r\n    B.y:=A.y+Sab*Sin(ab_bear);\r\n    result:=B;\r\nend;\r\n\r\n\/\/=======================\u5750\u6807\u53cd\u7b97\u51fd\u6570,\u5df2\u77e5A,B\u6c42AB\u65b9\u4f4d\u89d2\u548cSab,xx\u4e3aAB\u6d4b\u7ed8\u8c61\u9650\u5e8f\u53f7\r\nfunction LCalCoordinate(A,B:Point;var ab_bear:single;xx:integer):single;\r\nvar Xab,Yab:single;                                   \/\/\u5206\u522b\u4e3aX,Y\u5750\u6807\u5dee\r\nbegin\r\n    Xab:=B.x-A.x;\r\n    Yab:=B.y-A.y;\r\n    ab_bear:=Arctan(Yab\/Xab);                         \/\/\u6539\u53d8\u53c2\u6570ab_bear\u503c\u5e76\u8fd4\u56de\r\n    if ab_bear&lt;0 then ab_bear:=-ab_bear;              \/\/\u5982\u679cab_bear\u5c0f\u4e8e0\u65f6\r\n    case xx of                                        \/\/\u8f6c\u6362\u4e3a\u5750\u6807\u65b9\u4f4d\u89d2\r\n       1:ab_bear:=ab_bear;\r\n       2:ab_bear:=Pi-ab_bear;\r\n       3:ab_bear:=Pi+ab_bear;\r\n       4:ab_bear:=2*Pi-ab_bear;\r\n       end;\r\n    result:=Sqrt(Sqr(Xab)+Sqr(Yab));\r\nend;\r\n\r\n\/\/========\u6d4b\u8fb9\u4ea4\u4f1a\u7684\u8ba1\u7b97,\u5df2\u77e5A,B,ap\u957f,bp\u957f,\u6c42P\u3002P\u70b9\u5728A,B\u4e0b\u4fa7\u5219fm=1;\u5728\u4e0a\u4fa7\u5219fm=-1,xx\u4e3aAB\u6d4b\u7ed8\u8c61\u9650\u5e8f\u53f7\r\nfunction SidesCross(A,B:Point;ap,bp:single;fm,xx:integer):Point;\r\nvar Sab:single;                                           \/\/AB\u8fb9\u957f\r\n    ab_bear:single;                                       \/\/AB\u65b9\u4f4d\u89d2\r\n    ap_bear:single;                                       \/\/AP\u65b9\u4f4d\u89d2\r\n    a_bear:single;                                        \/\/\u89d2A\u503c(\u5f27\u5ea6)\r\n    P:Point;\r\nbegin\r\n    Sab:=LCalCoordinate(A,B,ab_bear,xx);          \/\/\u5750\u6807\u53cd\u7b97\u6c42\u51faAB\u957f\u548cAB\u65b9\u4f4d\u89d2\r\n    a_bear:=YuXianFunc(Sab,ap,bp);                             \/\/\u4f59\u5f26\u51fd\u6570\u6c42A\u89d2\r\n    ap_bear:=JustifyBear(ab_bear+fm*a_bear);                    \/\/\u7b97AP\u7684\u65b9\u4f4d\u89d2\r\n    P:=RCalCoordinate(A,ap,ap_bear);                     \/\/\u5750\u6807\u6b63\u7b97\u6c42\u51faP\u70b9\u5750\u6807\r\n    result:=P;\r\nend;\r\n\r\n\/\/=======================\u5c06\u5f27(\u89d2)\u5ea6\u5ea6\u5316\u52300\u52302*Pi\u4e4b\u95f4,\u7ea0\u6b63\u5f27(\u89d2)\u5ea6\u8303\u56f4==========\r\nfunction JustifyBear(bear:single):single;overload;\r\nbegin\r\n    if bear&lt;0 then\r\n    repeat\r\n        bear:=bear+2*Pi;\r\n    until bear&gt;=0;\r\n    if bear&gt;2*Pi then\r\n    repeat\r\n        bear:=bear-2*Pi;\r\n    until bear&lt;=2*Pi;\r\n    result:=bear;\r\nend;\r\n\r\nfunction JustifyBear(bear:string):string;overload;\r\nvar seconds:single;\r\nbegin\r\n    seconds:=CoordinateToSeconds(bear);\r\n    if seconds&lt;0 then\r\n    repeat\r\n       seconds:=seconds+360*3600;\r\n    until seconds&gt;=0;\r\n    if seconds&gt;360*3600 then\r\n    repeat\r\n       seconds:=seconds-360*3600;\r\n    until seconds&lt;360*3600;\r\n    result:=SecondsToCoordinate(seconds);\r\nend;\r\n\r\n\/\/======================\u4f59\u5f26\u51fd\u6570\u6c42\u89d2\u503c,\u5df2\u77e5\u4e09\u8fb9\u957fa,b,c\u5176\u4e2dc\u4e3a\u6b32\u6c42\u89d2\u7684\u5bf9\u8fb9======\r\nfunction YuXianFunc(a,b,c:single):single;\r\nvar bear:single;\r\nbegin\r\n    bear:=Arccos((Sqr(a)+Sqr(b)-Sqr(c))\/(2*a*b));\r\n    result:=bear;\r\nend;\r\n\r\n\/\/=======================\u5df2\u77e5A,B\u5750\u6807\u6c42AB\u957f\u5ea6===================================\r\nfunction CalABLong(A,B:Point):single;\r\nbegin\r\n    result:=Sqrt(Sqr(A.x-B.x)+Sqr(A.y-B.y));\r\nend;\r\n\r\n\/\/======================\u7531A,B\u4e24\u70b9\u5750\u6807\u5224\u65adAB\u662f\u5728\u6d4b\u7ed8\u5750\u6807\u7cfb\u4e2d\u54ea\u8c61\u9650==============\r\nfunction JudgeABXX(A,B:Point):integer;\r\nbegin\r\n   result:=1;\r\n   if (B.x-A.x&gt;0) and (B.y-A.y&gt;0) then result:=1;\r\n   if (B.x-A.x&lt;0) and (B.y-A.y&gt;0) then result:=2;\r\n   if (B.x-A.x&lt;0) and (B.y-A.y&lt;0) then result:=3;\r\n   if (B.x-A.x&gt;0) and (B.y-A.y&lt;0) then result:=4;\r\nend;\r\n\r\n\/\/=======================\u7531A,B\u5750\u6807\u8ba1\u7b97AB\u7684\u65b9\u4f4d\u89d2\uff0cxx,\u8c61\u9650,FW,\u65b9\u4f4d==============\r\nfunction CalAB_FWbear(A,B:Point):single;\r\nvar ab_bear:single;\r\n    xx:integer;\r\nbegin\r\n    xx:=JudgeABXX(A,B);\r\n    LCalCoordinate(A,B,ab_bear,xx);\r\n    result:=ab_bear;\r\nend;\r\n\r\n\/\/======================\u6b63\u5f26\u51fd\u6570\u6c42\u8fb9\u957f,\u5df2\u77e5a\u8fb9\u548cA,B\u89d2==========================\r\nfunction ZhengXianFunc(a:single;a_bear,b_bear:single):single;\r\nbegin\r\n   result:=0;\r\n   if sin(a_bear)&lt;&gt;0 then\r\n   result:=a*sin(b_bear)\/sin(a_bear);\r\nend;\r\n\r\n\/\/======================\u5c06\u89d2\u5ea6\u8f6c\u6362\u6210\u79d2\u503c\uff0c\u598230.20.10\u8f6c\u6362\u6210\u79d2\u503c=================\r\nfunction CoordinateToSeconds(Deg:string):single;\r\nvar deg1,deg2:string;\r\n    sum:single;\r\n    temp:string;\r\nbegin\r\n    sum:=0;\r\n    temp:=Deg;\r\n    if copy(Deg,1,1)='-' then Deg:=Copy(Deg,2,Length(Deg)-1);\/\/\u5982\u679c\u4e3a\u8d1f\u6570\u5219\u5316\u4e3a\u6b63\u7684\r\n    if pos('.',Deg)=0 then\r\n      begin\r\n       sum:=StrToInt(Deg)*3600;\r\n      end;\r\n    if pos('.',Deg)&lt;&gt;0 then\r\n      begin\r\n        deg1:=copy(deg,pos('.',deg)+1,length(deg)-pos('.',deg)); \/\/deg1=30.20\r\n        deg2:=copy(deg,1,pos('.',deg)-1);                         \/\/deg2=60\r\n        sum:=StrToInt(deg2)*3600;                                 \/\/\u5316\u6210\u79d2\r\n        if pos('.',deg1)=0 then\r\n          begin\r\n           sum:=sum+StrToInt(deg1)*60;\r\n          end;\r\n        if pos('.',deg1)&lt;&gt;0 then\r\n          begin\r\n           deg2:=copy(deg1,1,pos('.',deg1)-1);\r\n           sum:=sum+StrToInt(deg2)*60;\r\n           deg2:=copy(deg1,pos('.',deg1)+1,length(deg1)-pos('.',deg1));\r\n           sum:=sum+StrToFloat(deg2);\r\n          end;\r\n      end;\r\n   result:=sum;\r\n   if copy(temp,1,1)='-' then result:=-result;\r\nend;\r\n\r\n\/\/=======================\u5c06\u79d2\u503c\u8f6c\u6362\u6210\u89d2\u5ea6\u503c====================================\r\nfunction SecondsToCoordinate(Se:single):string;\r\nvar str1:string;\r\n    temp:integer;\r\n    o:single;\r\nbegin\r\n    if Se&lt;0 then Se:=-Se;\r\n    temp:=Trunc(Se);\r\n    o:=se-Trunc(Se);                               \/\/\u5982\u679c\u76ee\u6807\u4e3a\u8d1f\u6570\r\n    str1:=IntToStr(temp div 3600)+'.';\r\n    str1:=str1+IntToStr((temp mod 3600) div 60)+'.';\r\n    str1:=str1+FloatToStr((temp mod 60)+o);\r\n    result:=str1;\r\n    if se&lt;0 then result:='-'+result;\r\nend;\r\n\r\n\/\/========================\u4e24\u4e2a\u89d2(30.20.10\u7684\u5f62\u5f0f)\uff0c\u52a0\u51cf\u6cd5\u8fd0\u7b97,1234\u5206\u522b\u4e3a\u52a0\u51cf\u4e58\u9664\r\nfunction CoordinateAddAndSub(A,B:string;i:integer):string;\r\nvar temp:single;\r\n    temp1:single;\r\nbegin\r\n    case i of\r\n       1:begin                                                       \/\/\u52a0\u6cd5\u8fd0\u7b97\r\n           temp:=CoordinateToSeconds(A)+CoordinateToSeconds(B);\r\n           result:=SecondsToCoordinate(temp);\r\n         end;\r\n       2:begin                                                       \/\/\u51cf\u6cd5\u8fd0\u7b97\r\n           temp:=CoordinateToSeconds(A)-CoordinateToSeconds(B);\r\n           result:=SecondsToCoordinate(temp);\r\n         end;\r\n       3:begin                                                       \/\/\u4e58\u6cd5\u8fd0\u7b97\r\n           temp:=CoordinateToSeconds(A) * StrToInt(B);\r\n           result:=SecondsToCoordinate(temp);\r\n         end;\r\n       4:begin                                                       \/\/\u9664\u6cd5\u8fd0\u7b97\r\n           temp1:=CoordinateToSeconds(A) \/ StrToInt(B);\r\n           temp:=JustifyFloat(temp1);                                \/\/\u5947\u8fdb\u5076\u4e0d\u8fdb\r\n           result:=SecondsToCoordinate(temp);\r\n         end;\r\n       end;\r\nend;\r\n\r\nend.\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>unit Cehui; {&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; == \u25ce\u25ce\u25ce [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-162","post","type-post","status-publish","format-standard","hentry","category-code_related"],"_links":{"self":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts\/162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/comments?post=162"}],"version-history":[{"count":1,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts\/162\/revisions"}],"predecessor-version":[{"id":4808,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts\/162\/revisions\/4808"}],"wp:attachment":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/media?parent=162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/categories?post=162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/tags?post=162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}