18
$\开始组$

我想制作一个算法,将所有具有相同形状的细节分组。每个细节都由其表面和轮廓线列表定义。

首先,我认为拥有相同的周长和相同的表面就足够了,但我看到了这一点链接这是一个错误的假设。

如果我把两个形状具有相同数量的线段作为附加条件,这就足够了吗?否则我怎么检查呢?

问题是,对于每个细节,它们都可以实现旋转或对称。

编辑:

谢谢你的回答,我终于找到了解决问题的方法(答案如下)

$\端组$
17
  • $\开始组$ 风筝/视差图不是一个反例吗?我认为很难找到确切的条件,让你明确地说:你不能把一个形状切成碎片,而是用同样的周长重新排列它们。腿的数量当然不够。 $\端组$
    – 跳蚤血
    评论 2019年7月25日6:06
  • $\开始组$ @史蒂文格雷是的,但相关答案是关于两个表面和周长相同的细节。我正在试图找到一个考虑更多参数的解决方案,如分段数或分段之间的角度列表。。。我认为,如果我考虑到线段列表及其长度列表以及每个线段之间的角度列表,那就足够了。 $\端组$ 评论 2019年7月25日8:06
  • $\开始组$ 好吧,我找到了解决方案,将首先在工作时测试它,然后在这里发布我的答案,无论如何,谢谢。 $\端组$ 评论 2019年7月25日12:34
  • $\开始组$ 现在无法查找,但本月在Numberphile youtube频道上有一段有趣的视频,讨论如何检测形状的唯一性(或类似问题,我不确定)。你可能想看看。 $\端组$
    – 作记号
    评论 2019年7月25日15:39
  • $\开始组$ @Mark找到了解决方案,我现在正在开发它,我稍后完成测试后会写下答案。请原谅,我是“数学”堆栈的新手(我以前在stackoverflow上),我的答案可以是图形的,或者我可以用一点代码解释它吗? $\端组$ 评论 2019年7月25日15:56

7个答案7

重置为默认值
85
$\开始组$

本着否定的精神回答相关问题:

由相同周长和面积但形状不同的正方形组成的两个形状

$\端组$
1
  • 10
    $\开始组$ 我喜欢它的简单性,因为一个反例就足以证明这个猜想是错误的。这很好地结束了讨论。 $\端组$ 评论 2019年7月25日16:14
34
$\开始组$

受哈根·冯·埃岑(Hagen von Eitzen)答案的启发,一对特洛米诺(tetrominoes)提供了另一个反例(在波利米诺(polyominoes)中最少):

在此处输入图像描述

$\端组$
2
  • 7
    $\开始组$ 破坏no-words方法:两者的面积都是$4$,周长都是$10$,并且都是八角形(相同的段数,$8$)。 $\端组$ 评论 2019年7月26日22:16
  • 7
    $\开始组$ 当然,你是对的,但我更愿意把计数留给读者。 $\端组$ 评论 2019年7月26日23:05
14
$\开始组$

不,这还不够。即使是四边形也不够。拿一个侧面的风筝$1,1,3,3$以及两者之间的角度$1$是一个直角。周长是$8$面积是$12(1+\sqrt{17})$现在取一个侧面为$2$。它的周长也为$8$你可以选择角度使区域匹配。对于更多的球队来说,情况更糟。面积和周长只是两个约束,同时还有很多自由度。

$\端组$
4
  • $\开始组$ 好的,谢谢,你能看看我的编辑吗? $\端组$ 评论 2019年7月25日6:37
  • $\开始组$ 找到解决方案,将首先在实际中进行测试,然后在此处发布 $\端组$ 评论 2019年7月25日12:35
  • 2
    $\开始组$ 这里有一个更复杂的例子,驳斥了提问者观点的较弱版本。即使指定为四边形,并且指定边长按顺序接受是$1、1、3、3$(当然,这比仅仅要求周长为$8$强),并指定面积为$\frac12(1+\sqrt{17})$,它仍然不能确定四边形的大小(没有指定角度)。原因是它可以是你提到的凸风筝,也可以是非凸“箭头”。 $\端组$ 评论 2019年7月26日22:38
  • 1
    $\开始组$ (续)对于某些区域,如2.9$(2至3美元之间的任何数字都可以使用),两个具有边的非相配四边形按顺序接受1,1,3,3$为二者都凸面的。 $\端组$ 评论 2019年7月26日23:04
8
$\开始组$

在此处输入图像描述

可能是最简单的反例:用长度不等的线段形成三角形的两侧。一种是镜像,另一种是旋转180°。

$\端组$
1
  • $\开始组$ 甚至有两个相同的角度。 $\端组$ 评论 2019年8月7日9:17
$\开始组$

嗯,我终于做到了,但时间比预期的要长:

我的形状由以下列表定义轮廓元素,轮廓由2个点和半径定义。如果这是一段,那么半径=0,如果这是圆弧,如果我在三角方向旋转,半径为正,如果相反,半径为负)。

我首先检查面积是否相等(只是为了更快地确定形状是否相等)。

对于每个形状,我按顺时针方向浏览每个线段(或圆弧),并返回3个结果:

  • 线段长度列表(仅毕达哥拉斯,不检查半径)
  • 每个线段/弧的半径列表
  • 每个线段和连续线段之间的角度列表

然后我可以比较它们(考虑到我从每个图的相同点开始)。在C#中,我只是做了一个循环,尝试从不同的点开始。

如果三个列表都相等,则表示形状相等且没有旋转。

然后,对于对称性问题,我将重新计算上述3个列表中的第二个形状,但浏览相反方向的轮廓,如果结果相等(角度和半径正好是相反的符号),那么它就是具有对称性的相同形状。

$\端组$
5
  • 5
    $\开始组$ 你已经解决了问题,这很好,但这并不能回答你提出的问题。 $\端组$ 评论 2019年7月26日15:26
  • 2
    $\开始组$ @罗里·道尔顿(RoryDaulton)确切地说,事实上,我没有正确地提出问题,这就是为什么我接受了另一个答案,这个答案回答得很好,只是添加了一个答案来表示谁会遇到同样的问题。 $\端组$ 评论 2019年7月26日15:47
  • 1
    $\开始组$ @RoryDaulton——实际上,它确实直接回答了OP中提出的问题。只有标题中的问题没有得到它的回答(因此齐格弗里德五世接受了哈根·冯·艾岑对这个问题的回答是恰当的)。 $\端组$ 评论 2019年7月26日16:46
  • 1
    $\开始组$ 根据需要检查等式的次数,强制一个规范的起始顶点可能是有意义的,而不是在所有可能的起始顶点上循环。例如:在三元组(长度、半径、角度)上定义一个排序函数,在创建对象时,确保每个三元组列表是其循环排列中最小的(按字典顺序)。如果实现得当,我认为创建一个具有n条边的形状需要O(n log n),比较它们需要O(n),而不是O(n)创建它们和O(n^2)比较它们。 $\端组$ 评论 2019年7月28日9:45
  • $\开始组$ @FedericoPoloni事实上,这是一个好主意,不仅对于花费的时间,而且代码更容易实现。但如果我不按顺序(对称性)取线段,我不完全确定这是否可行?你觉得排序功能怎么样?在我的例子中,我认为这不可行(不确定),因为我还必须检查每个线段是否有一些倒角(可以称之为3D?),每个细节内部是否有一些钻孔,所以对于钻孔,我计算每个钻孔和我的形状的每个角之间的距离列表。无论如何,我还是要感谢您提出的简化代码的想法。 $\端组$ 评论 2019年7月28日11:10
0
$\开始组$

1966年提出了一个著名的问题,”你能听到鼓的形状吗?“也就是说,你能找到两个光谱相同的不同平面畴吗?众所周知,任何两个这样的畴都必须具有相同的面积和周长。20世纪90年代初,戈登、韦伯和沃尔伯特否定了这个问题。下面是他们的示例:

在此处输入图像描述

注意,边数也是一样的,所以这个答案是OP的问题,附加了更多的条件。

$\端组$
-1
$\开始组$

是的,正如其他人所演示的那样,在给定相同面积、周长和线段数量的情况下,可以有不同的形状。

此外,在我看来,给定任意数量的度量,您可以有不同的形状。以这把看起来很可怕的钥匙为例:

在此处输入图像描述

你可以很容易地想象出无限多个这样的键,每个键都由7个数字唯一表示。对于此键,这些值为2、3、1、2、3,1、2。

这些不需要是整数。

你可以想象一把百万齿的钥匙是用一百万个数字唯一表示的。

现在,从技术上讲,你可以用一个实数来表示一百万个实数。然而,我不相信任何这样的函数进行这种转换是连续的,所以很可能对您没有用处。当它们不是连续的时,您会得到像5.213283和5.213284这样的度量值,它们代表了截然不同的形状。

我会考虑周长和面积很好的连续指标。对多边形点的任何微小扰动都会导致这些值发生微小变化。

注:我可能完全错了。我期待着今天晚些时候能看到这段视频。

$\端组$
1
  • $\开始组$ 这很好,但对于其他答案来说并不是什么新鲜事,问题更多的是,如何解决这个问题,即使我在标题中没有正确地表述它。无论如何,我找到了怎么做的方法(答案如下)。 $\端组$ 评论 2019年8月9日2:45

你必须登录来回答这个问题。

不是你想要的答案吗?浏览标记的其他问题.