Java 计算几何:在镜子上旋转、平移或反射后,找出三角形的位置
我有一个小的竞赛问题,其中有一组点,在2D中,形成一个三角形。该三角形可能会进行任意旋转,可能会进行任意平移(均在2D平面内),也可能会在镜子上反射,但其尺寸保持不变。 然后,他们给了我一组平面上的点,在一个或多个几何运算后,我必须找到形成三角形的3个点 例如: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 我打赌它应该应用一些已知的算法,但我不知道是哪个。最常见的有:凸包、扫描平面、三角剖分等
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 |。长度由毕达哥拉斯公式给出(但通过比较,可以在每次测试中节省平方根运算)
线段长度的平方…由于变换只是旋转、缩放和镜像,因此您可以通过检查三角形两侧的点积来找到形成变换三角形的点:
编辑:是的,吉姆是对的,仅仅一个点积是不够的,你需要做所有三个,包括ED.EF和FD.FE。因此,最终,该方法的计算数量与平方距离法相同。因为变换只是旋转、缩放和镜像,所以您可以通过检查三角形两侧的点积来找到形成变换三角形的点:
编辑:是的,吉姆是对的,仅仅一个点积是不够的,你需要做所有三个,包括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 |。非常好理解!非常好理解!