Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算几何:在镜子上旋转、平移或反射后,找出三角形的位置_Java_C++_Algorithm_Geometry_Computational Geometry - Fatal编程技术网

Java 计算几何:在镜子上旋转、平移或反射后,找出三角形的位置

Java 计算几何:在镜子上旋转、平移或反射后,找出三角形的位置,java,c++,algorithm,geometry,computational-geometry,Java,C++,Algorithm,Geometry,Computational Geometry,我有一个小的竞赛问题,其中有一组点,在2D中,形成一个三角形。该三角形可能会进行任意旋转,可能会进行任意平移(均在2D平面内),也可能会在镜子上反射,但其尺寸保持不变。 然后,他们给了我一组平面上的点,在一个或多个几何运算后,我必须找到形成三角形的3个点 例如: 5 15 8 5 20 10 6 5 17 5 20 20 5 10 5 15 20 15 10 Output: 5 17 10 5 15 20 我打赌它应该应用一些已知的算法,但我不知道是哪个。最常见的有:凸包、扫描平面、三角剖分等

我有一个小的竞赛问题,其中有一组点,在2D中,形成一个三角形。该三角形可能会进行任意旋转,可能会进行任意平移(均在2D平面内),也可能会在镜子上反射,但其尺寸保持不变。 然后,他们给了我一组平面上的点,在一个或多个几何运算后,我必须找到形成三角形的3个点

例如:

5 15
8 5
20 10
6
5 17
5 20
20 5
10 5
15 20
15 10
Output:
5 17
10 5
15 20
我打赌它应该应用一些已知的算法,但我不知道是哪个。最常见的有:凸包、扫描平面、三角剖分等


有人能给小费吗?我不需要密码,只要按一下就行了

这通常是通过矩阵数学来完成的。介绍旋转、平移和反射矩阵。这是(带图片的)。

这通常是通过矩阵数学完成的。介绍旋转、平移和反射矩阵。这是(附图片)。

三角形是由其三条边的长度唯一定义的(忽略旋转、翻转和平移)。标记原始三角形A、B、C的顶点。您正在查看 对于点D、E、F,使得| AB |=| DE |、| AC |=| DF |和| BC |=| EF |。长度由毕达哥拉斯公式给出(但通过比较,可以在每次测试中节省平方根运算)
线段长度的平方…

三角形由其三条边的长度唯一定义(忽略旋转、翻转和平移)。标记原始三角形A、B、C的顶点。您正在查看 对于点D、E、F,使得| AB |=| DE |、| AC |=| DF |和| BC |=| EF |。长度由毕达哥拉斯公式给出(但通过比较,可以在每次测试中节省平方根运算)
线段长度的平方…

由于变换只是旋转、缩放和镜像,因此您可以通过检查三角形两侧的点积来找到形成变换三角形的点:

  • 对于原始三角形A、B、C,计算AB.AC、BA.BC和CA.CB的点积
  • 对于每组三个点D、E、F,计算DE.DF的点积,并与1中的三个点积进行比较
  • 这是因为AB.AC=|AB | x | AC | x cos(a),两个长度和它们之间的角度定义了一个三角形


    编辑:是的,吉姆是对的,仅仅一个点积是不够的,你需要做所有三个,包括ED.EF和FD.FE。因此,最终,该方法的计算数量与平方距离法相同。

    因为变换只是旋转、缩放和镜像,所以您可以通过检查三角形两侧的点积来找到形成变换三角形的点:

  • 对于原始三角形A、B、C,计算AB.AC、BA.BC和CA.CB的点积
  • 对于每组三个点D、E、F,计算DE.DF的点积,并与1中的三个点积进行比较
  • 这是因为AB.AC=|AB | x | AC | x cos(a),两个长度和它们之间的角度定义了一个三角形


    编辑:是的,吉姆是对的,仅仅一个点积是不够的,你需要做所有三个,包括ED.EF和FD.FE。因此,最后,这里的计算数量与平方距离法中的计算数量相同。

    给定的三角形由三个长度定义。您希望在列表中找到三个点,它们正好以这些长度分隔

    将给定的长度平方,以避免使用
    sqrt

    找出列表中每对点之间距离的平方,只注意与给定长度一致的点:O(V^2),但系数较低,因为大多数长度不匹配

    现在有了一个具有O(V)边的稀疏图。在O(V)时间内找到大小为3的每个循环,并修剪匹配项。(不确定最好的方法,但要有合适的大O型。)


    总复杂度:O(V^2),但根据点数,在O(V)中找到循环可能是限制因素。对点列表进行空间排序以避免查看所有的点对,这将改善渐进行为,否则。

    给定的三角形由三个长度定义。您希望在列表中找到三个点,它们正好以这些长度分隔

    将给定的长度平方,以避免使用
    sqrt

    找出列表中每对点之间距离的平方,只注意与给定长度一致的点:O(V^2),但系数较低,因为大多数长度不匹配

    现在有了一个具有O(V)边的稀疏图。在O(V)时间内找到大小为3的每个循环,并修剪匹配项。(不确定最好的方法,但要有合适的大O型。)


    总复杂度:O(V^2),但根据点数,在O(V)中找到循环可能是限制因素。对点列表进行空间排序以避免查看所有点对,这将改善渐近行为,否则。

    FYI这与数学比编程更相关,不确定它是否真的属于此站点FYI这与数学比编程更相关,不确定它是否真的属于这个网站我认为这还不够。P点Q=R点S并不一定意味着| P |=| R |或| P |=| S |。我认为这是不够的。P点Q=R点S并不一定意味着| P |=| R |或| P |=| S |。非常好理解!非常好理解!