<div dir="ltr"><div class="gmail_default" style="font-size:small">Thanks a lot. It is greatly appreciated</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Nov 12, 2019 at 1:09 AM Martin Chapman <<a href="mailto:mchapman@hyperacktive.com">mchapman@hyperacktive.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-US"><div class="gmail-m_-1149120607638915781WordSection1"><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">Ahmet,<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">The following function will return the angle in decimal degrees given 3 points on a flat plane.  The three points create the angle.  If you have two intersecting lines then the angle of any given corner is the center point where the lines intersect and two end points of the lines that complete an angle.<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas"><u></u> <u></u></span></p><p class="MsoNormal"><b><span style="font-size:9.5pt;font-family:Consolas">// NOTE: the points must be fed to the function in clockwise order.  <u></u><u></u></span></b></p><p class="MsoNormal"><b><span style="font-size:9.5pt;font-family:Consolas">// NOTE: the angle returned is an azimuth angle and not a trigonometric angle.  Azimuth angles start with zero at north and increase clockwise whereas trigonometric angles zero starts to the right (east) on the x axis and increase going counter clockwise.<u></u><u></u></span></b></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">const double PI = 3.1415926535897932384626433;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">const double RAD2DEG = 180.0 / PI;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">double GetAngle(const double& x1, const double& y1, const double& x2, const double& y2, const double& x3, const double& y3)<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">{<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">       double theta1 = atan2(y2 - y1, x2 - x1);<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">       double theta2 = atan2(y2 - y3, x2 - x3);<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">       double theta = (theta2 - theta1) * RAD2DEG;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">       if (theta < 0) theta += 360.0;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">       return theta;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">}<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas"><u></u> <u></u></span></p><p class="MsoNormal"><b><span style="font-size:9.5pt;font-family:Consolas">// To get the intersection of two lines use:<u></u><u></u></span></b></p><p class="MsoNormal"><b><span style="font-size:9.5pt;font-family:Consolas">// NOTE: returns FALSE if the lines don’t intersect<u></u><u></u></span></b></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">struct Point<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">{<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">       double x;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">       double y;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">};<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">struct Line<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">{<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">       Point point1;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">       Point point2;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">};<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">BOOL GetLineIntersection(const Line& line1, const Line& line2, double& x, double& y)<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">{<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">    double a1 = line1.point2.y - line1.point1.y;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">    double b1 = line1.point1.x - line1.point2.x;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">    double c1 = a1 * line1.point1.x + b1 * line1.point1.y;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas"> <u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">    double a2 = line2.point2.y - line2.point1.y;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">    double b2 = line2.point1.x - line2.point2.x;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">    double c2 = a2 * line2.point1.x + b2 * line2.point1.y;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas"> <u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">    double determinant = a1 * b2 - a2 * b1;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">    if (determinant == 0) return FALSE;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">    x = (b2 * c1 - b1 * c2) / determinant;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">    y = (a1 * c2 - a2 * c1) / determinant;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">       return TRUE;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas">}<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">Best regards,<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">Martin Chapman<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p><p class="MsoNormal"><b><span style="font-size:10pt;font-family:Tahoma,sans-serif">From:</span></b><span style="font-size:10pt;font-family:Tahoma,sans-serif"> gdal-dev [mailto:<a href="mailto:gdal-dev-bounces@lists.osgeo.org" target="_blank">gdal-dev-bounces@lists.osgeo.org</a>] <b>On Behalf Of </b>Ahmet Temiz<br><b>Sent:</b> Monday, November 11, 2019 7:07 AM<br><b>To:</b> gdal-dev<br><b>Subject:</b> [gdal-dev] angle of crossing two lines<u></u><u></u></span></p><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal">Hi,<u></u><u></u></p></div><div><p class="MsoNormal">I need to know angle of crossing two lines.<u></u><u></u></p></div><div><p class="MsoNormal">which function can I use?<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">regards<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><p class="MsoNormal">-- <u></u><u></u></p><div><div><div><div><div><p class="MsoNormal">Ahmet Temiz<br>Jeoloji Müh.<br>Afet ve Acil Durum Yönetimi Başkanlığı<br>Bilgi İşlem  Dairesi Başkanlığı-CBS Grubu<br><br><br>________________________<br><br>Ahmet Temiz<br>Geological Eng.<br>Information Systems - GIS Group<br>Disaster and Emergency Management<br>of Presidency<u></u><u></u></p></div></div></div></div></div></div></div></div></blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Ahmet Temiz<br>Jeoloji Müh.<br>Afet ve Acil Durum Yönetimi Başkanlığı<br>Bilgi İşlem  Dairesi Başkanlığı-CBS Grubu<br><br><br>________________________<br><br>Ahmet Temiz<br>Geological Eng.<br>Information Systems - GIS Group<br>Disaster and Emergency Management<br>of Presidency</div></div></div></div></div>