Algorithm 用圆上的一组点计算四边形的数目
设x^2+y^2=r^2是一个r为实的圆 首先,我得到圆上的所有整数点(例如,(1,2),(-1,2),(1,-2),(-1,-2),(2,1),(-2,1),(2,-1),(-2,-1),r=sqrt{5}) 如何得到这些点上可能存在的四边形数Algorithm 用圆上的一组点计算四边形的数目,algorithm,geometry,graph-algorithm,Algorithm,Geometry,Graph Algorithm,设x^2+y^2=r^2是一个r为实的圆 首先,我得到圆上的所有整数点(例如,(1,2),(-1,2),(1,-2),(-1,-2),(2,1),(-2,1),(2,-1),(-2,-1),r=sqrt{5}) 如何得到这些点上可能存在的四边形数 我知道的唯一方法是使用蛮力测试所有可能的4个循环,并移除交叉边的循环,但对于大r来说,它变得太大了。即使对于r=sqrt(5),使用python也需要大约10秒钟。改变方法,从一个简单的问题开始: 给定位于圆上的一组点: 如果尺寸为3,可以有多少个四
我知道的唯一方法是使用蛮力测试所有可能的4个循环,并移除交叉边的循环,但对于大r来说,它变得太大了。即使对于r=sqrt(5),使用python也需要大约10秒钟。改变方法,从一个简单的问题开始: 给定位于圆上的一组点:
- 如果尺寸为3,可以有多少个四边形
- 容易:0
- 如果尺寸为4,可以有多少个四边形
- 因为这些点位于同一个圆上,所以永远不会有3个点位于同一条直线上。所以答案是1
- 如果尺寸为5,可以有多少个四边形
- 对于4个点,我们只有一个四边形:(p1,p2,p3,p4)。现在我可以用p5替换它们中的每一个。总数是5
- 如果尺寸为n,可以有多少个四边形
- 您可以有尽可能多的四边形作为可能的组合数,而无需重复大小为4的子集中的一组n项,即n/(4!*(n-4)!)
记住:给定3个不在同一条直线上的点,你只能有一个圆。无论你从一个圆中得到三个点,它们永远不会在同一条直线上。这意味着,无论你如何从一个圆中获得4个点,你都可以使用它们来构建一个四边形改变方法,从一个简单的问题开始: 给定位于圆上的一组点:
- 如果尺寸为3,可以有多少个四边形
- 容易:0
- 如果尺寸为4,可以有多少个四边形
- 因为这些点位于同一个圆上,所以永远不会有3个点位于同一条直线上。所以答案是1
- 如果尺寸为5,可以有多少个四边形
- 对于4个点,我们只有一个四边形:(p1,p2,p3,p4)。现在我可以用p5替换它们中的每一个。总数是5
- 如果尺寸为n,可以有多少个四边形
- 您可以有尽可能多的四边形作为可能的组合数,而无需重复大小为4的子集中的一组n项,即n/(4!*(n-4)!)
记住:给定3个不在同一条直线上的点,你只能有一个圆。无论你从一个圆中得到三个点,它们永远不会在同一条直线上。这意味着,无论从一个圆中获得4个点,您都可以使用它们来构建一个四边形请注意,圆上的任何4个点都可以形成一个四边形(例如,按顺时针顺序选择它们)。你只需要找到所有的积分值 pythogorean三元组,其中m^n+n^2=r^2
T = 0
for m = 1 ... r
for n = 1 ... r
if m*m + n*n = r*r
T++
N = 4*T // (+/-m, +/-n) points on circle
result = N > 0 ? (N choose 4) : 0 // all quads
为了提高效率,您可以去掉上面的内环(n^2=地板(r^2-m^2))请注意,圆上的任意4个点形成一个四边形(例如,按顺时针顺序选择它们)。你只需要找到所有的积分值 pythogorean三元组,其中m^n+n^2=r^2
T = 0
for m = 1 ... r
for n = 1 ... r
if m*m + n*n = r*r
T++
N = 4*T // (+/-m, +/-n) points on circle
result = N > 0 ? (N choose 4) : 0 // all quads
为了提高效率,你可以去掉上面的内环(n^2=地板(r^2-m^2))10秒后你得到了什么答案?@user3386109 38个四边形,有210个候选空间。圆上的任何4个(不同)点都可以连接成一个四边形右侧(例如,按顺时针顺序选择4个点)?那么答案不就是n选择4=n*(n-1)*(n-2)*(n-3)/24吗?等等——r需要是毕达哥拉斯三元组(a,b,r)中的最大数。。。(+/-a,+/-b)会给你四分。。。嗯……10秒后你得到了什么答案?@user3386109 38个四边形,有210个候选点。圆上的任何4个(不同)点都可以连接成一个四边形(例如,按顺时针顺序选择4个点)?那么答案不就是n选择4=n*(n-1)*(n-2)*(n-3)/24吗?等等——r需要是毕达哥拉斯三元组(a,b,r)中的最大数。。。(+/-a,+/-b)会给你四分。。。六羟甲基三聚氰胺六甲醚。。。