<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Finding intersection point of a convex polygon edge and a moving point(vector) in Spatial Statistics Questions</title>
    <link>https://community.esri.com/t5/spatial-statistics-questions/finding-intersection-point-of-a-convex-polygon/m-p/379852#M1239</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Abdel,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I suppose the speed would not matter as long as the line from point Q extent outside the convex hull polygon. So with that in mind, take a look at the Python code below. It works with a list of points (hard coded in this snippet) and an angle (could be arithmetic or geographic). The following steps are carried out:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;UL&gt;&lt;BR /&gt;&lt;LI&gt;the points are added to a multipoint object&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;the convex hull polygon is calculated from the multipoint&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;the boundary is extracted from the polygon&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;the centroid of the polygon is in this case used for point Q&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;to be sure that the line starting in point Q will exit the polygon, I use a "large" length (so no speed used)&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;the point Q2 is determined using the length and angle&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;a line is created using Q and Q2&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;the line is intersected with the boundary to obtain the desired intersection point&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;the X and Y of the resulting point is printed&lt;/LI&gt;&lt;BR /&gt;&lt;/UL&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;def main():
&amp;nbsp;&amp;nbsp;&amp;nbsp; import arcpy, os

&amp;nbsp;&amp;nbsp;&amp;nbsp; # input points
&amp;nbsp;&amp;nbsp;&amp;nbsp; pnts = [[200,800],[100, 500],[300,100],[1000,200],[1200,700]]

&amp;nbsp;&amp;nbsp;&amp;nbsp; # input angle
&amp;nbsp;&amp;nbsp;&amp;nbsp; angle_geo = 100 # geographic degrees
&amp;nbsp;&amp;nbsp;&amp;nbsp; angle_ari = arithmatic_geographic(angle_geo) # = 350 in arithmetic degrees

&amp;nbsp;&amp;nbsp;&amp;nbsp; # create a multi point from input points
&amp;nbsp;&amp;nbsp;&amp;nbsp; arr_mp = arcpy.Array()
&amp;nbsp;&amp;nbsp;&amp;nbsp; for p in pnts:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pnt = arcpy.Point(p[0], p[1])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arr_mp.add(pnt)
&amp;nbsp;&amp;nbsp;&amp;nbsp; mp = arcpy.Multipoint(arr_mp)

&amp;nbsp;&amp;nbsp;&amp;nbsp; # determine convex hull of input points
&amp;nbsp;&amp;nbsp;&amp;nbsp; pol = mp.convexHull()

&amp;nbsp;&amp;nbsp;&amp;nbsp; # get boundary of convex hull polygon
&amp;nbsp;&amp;nbsp;&amp;nbsp; bnd = pol.boundary()

&amp;nbsp;&amp;nbsp;&amp;nbsp; # let's take centroid for Q
&amp;nbsp;&amp;nbsp;&amp;nbsp; q = pol.centroid

&amp;nbsp;&amp;nbsp;&amp;nbsp; # determine line length (enough to intersect boundary)
&amp;nbsp;&amp;nbsp;&amp;nbsp; length = pol.extent.width + pol.extent.height

&amp;nbsp;&amp;nbsp;&amp;nbsp; # create second point (Q2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; dx, dy = LengthDir(length, angle_ari)
&amp;nbsp;&amp;nbsp;&amp;nbsp; q2 = arcpy.Point(q.X + dx, q.Y + dy)

&amp;nbsp;&amp;nbsp;&amp;nbsp; # make line of Q and Q2
&amp;nbsp;&amp;nbsp;&amp;nbsp; arr_line = arcpy.Array()
&amp;nbsp;&amp;nbsp;&amp;nbsp; arr_line.add(q)
&amp;nbsp;&amp;nbsp;&amp;nbsp; arr_line.add(q2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; line = arcpy.Polyline(arr_line)

&amp;nbsp;&amp;nbsp;&amp;nbsp; # intersect (other, dimension), dimension can be 1 or 2
&amp;nbsp;&amp;nbsp;&amp;nbsp; pnt_int = line.intersect(bnd, 1) # returns mp

&amp;nbsp;&amp;nbsp;&amp;nbsp; # print resulting intersection coordinates
&amp;nbsp;&amp;nbsp;&amp;nbsp; for p in pnt_int:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print p.X, p.Y

def arithmatic_geographic(angle):
&amp;nbsp;&amp;nbsp;&amp;nbsp; new_angle = angle + 270
&amp;nbsp;&amp;nbsp;&amp;nbsp; while new_angle &amp;gt; 360:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new_angle -= 360
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 360 - new_angle


def LengthDir(length, angle):
&amp;nbsp;&amp;nbsp;&amp;nbsp; import math
&amp;nbsp;&amp;nbsp;&amp;nbsp; radian_angle = angle * math.pi / 180
&amp;nbsp;&amp;nbsp;&amp;nbsp; return length * math.cos(radian_angle), length * math.sin(radian_angle)

if __name__ == '__main__':
&amp;nbsp;&amp;nbsp;&amp;nbsp; main()&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If you can explain what your input data looks like, the code can be adapted.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Kind regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Xander&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 11 Dec 2021 17:32:03 GMT</pubDate>
    <dc:creator>XanderBakker</dc:creator>
    <dc:date>2021-12-11T17:32:03Z</dc:date>
    <item>
      <title>Finding intersection point of a convex polygon edge and a moving point(vector)</title>
      <link>https://community.esri.com/t5/spatial-statistics-questions/finding-intersection-point-of-a-convex-polygon/m-p/379851#M1238</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;How to calculate an intersection point of convex hull edge and a moving point leaving that hull? where all of the hull vertices are&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; known, the speed and the direction angle of the moving point are also known. An illustration is attached&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Abdel&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 08 Mar 2014 23:25:01 GMT</pubDate>
      <guid>https://community.esri.com/t5/spatial-statistics-questions/finding-intersection-point-of-a-convex-polygon/m-p/379851#M1238</guid>
      <dc:creator>Abdelarqub</dc:creator>
      <dc:date>2014-03-08T23:25:01Z</dc:date>
    </item>
    <item>
      <title>Re: Finding intersection point of a convex polygon edge and a moving point(vector)</title>
      <link>https://community.esri.com/t5/spatial-statistics-questions/finding-intersection-point-of-a-convex-polygon/m-p/379852#M1239</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Abdel,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I suppose the speed would not matter as long as the line from point Q extent outside the convex hull polygon. So with that in mind, take a look at the Python code below. It works with a list of points (hard coded in this snippet) and an angle (could be arithmetic or geographic). The following steps are carried out:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;UL&gt;&lt;BR /&gt;&lt;LI&gt;the points are added to a multipoint object&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;the convex hull polygon is calculated from the multipoint&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;the boundary is extracted from the polygon&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;the centroid of the polygon is in this case used for point Q&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;to be sure that the line starting in point Q will exit the polygon, I use a "large" length (so no speed used)&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;the point Q2 is determined using the length and angle&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;a line is created using Q and Q2&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;the line is intersected with the boundary to obtain the desired intersection point&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;the X and Y of the resulting point is printed&lt;/LI&gt;&lt;BR /&gt;&lt;/UL&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;def main():
&amp;nbsp;&amp;nbsp;&amp;nbsp; import arcpy, os

&amp;nbsp;&amp;nbsp;&amp;nbsp; # input points
&amp;nbsp;&amp;nbsp;&amp;nbsp; pnts = [[200,800],[100, 500],[300,100],[1000,200],[1200,700]]

&amp;nbsp;&amp;nbsp;&amp;nbsp; # input angle
&amp;nbsp;&amp;nbsp;&amp;nbsp; angle_geo = 100 # geographic degrees
&amp;nbsp;&amp;nbsp;&amp;nbsp; angle_ari = arithmatic_geographic(angle_geo) # = 350 in arithmetic degrees

&amp;nbsp;&amp;nbsp;&amp;nbsp; # create a multi point from input points
&amp;nbsp;&amp;nbsp;&amp;nbsp; arr_mp = arcpy.Array()
&amp;nbsp;&amp;nbsp;&amp;nbsp; for p in pnts:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pnt = arcpy.Point(p[0], p[1])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arr_mp.add(pnt)
&amp;nbsp;&amp;nbsp;&amp;nbsp; mp = arcpy.Multipoint(arr_mp)

&amp;nbsp;&amp;nbsp;&amp;nbsp; # determine convex hull of input points
&amp;nbsp;&amp;nbsp;&amp;nbsp; pol = mp.convexHull()

&amp;nbsp;&amp;nbsp;&amp;nbsp; # get boundary of convex hull polygon
&amp;nbsp;&amp;nbsp;&amp;nbsp; bnd = pol.boundary()

&amp;nbsp;&amp;nbsp;&amp;nbsp; # let's take centroid for Q
&amp;nbsp;&amp;nbsp;&amp;nbsp; q = pol.centroid

&amp;nbsp;&amp;nbsp;&amp;nbsp; # determine line length (enough to intersect boundary)
&amp;nbsp;&amp;nbsp;&amp;nbsp; length = pol.extent.width + pol.extent.height

&amp;nbsp;&amp;nbsp;&amp;nbsp; # create second point (Q2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; dx, dy = LengthDir(length, angle_ari)
&amp;nbsp;&amp;nbsp;&amp;nbsp; q2 = arcpy.Point(q.X + dx, q.Y + dy)

&amp;nbsp;&amp;nbsp;&amp;nbsp; # make line of Q and Q2
&amp;nbsp;&amp;nbsp;&amp;nbsp; arr_line = arcpy.Array()
&amp;nbsp;&amp;nbsp;&amp;nbsp; arr_line.add(q)
&amp;nbsp;&amp;nbsp;&amp;nbsp; arr_line.add(q2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; line = arcpy.Polyline(arr_line)

&amp;nbsp;&amp;nbsp;&amp;nbsp; # intersect (other, dimension), dimension can be 1 or 2
&amp;nbsp;&amp;nbsp;&amp;nbsp; pnt_int = line.intersect(bnd, 1) # returns mp

&amp;nbsp;&amp;nbsp;&amp;nbsp; # print resulting intersection coordinates
&amp;nbsp;&amp;nbsp;&amp;nbsp; for p in pnt_int:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print p.X, p.Y

def arithmatic_geographic(angle):
&amp;nbsp;&amp;nbsp;&amp;nbsp; new_angle = angle + 270
&amp;nbsp;&amp;nbsp;&amp;nbsp; while new_angle &amp;gt; 360:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new_angle -= 360
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 360 - new_angle


def LengthDir(length, angle):
&amp;nbsp;&amp;nbsp;&amp;nbsp; import math
&amp;nbsp;&amp;nbsp;&amp;nbsp; radian_angle = angle * math.pi / 180
&amp;nbsp;&amp;nbsp;&amp;nbsp; return length * math.cos(radian_angle), length * math.sin(radian_angle)

if __name__ == '__main__':
&amp;nbsp;&amp;nbsp;&amp;nbsp; main()&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If you can explain what your input data looks like, the code can be adapted.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Kind regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Xander&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 17:32:03 GMT</pubDate>
      <guid>https://community.esri.com/t5/spatial-statistics-questions/finding-intersection-point-of-a-convex-polygon/m-p/379852#M1239</guid>
      <dc:creator>XanderBakker</dc:creator>
      <dc:date>2021-12-11T17:32:03Z</dc:date>
    </item>
  </channel>
</rss>

