gpt4 book ai didi

c++ - 无法理解绘图程序中的错误答案

转载 作者:行者123 更新时间:2023-11-28 05:38:10 27 4
gpt4 key购买 nike

存在一个问题,他们在图表上有点(大约有 100 个点)并且它们都旋转了一定量,除了其中一个。因此,我通过计算与第一组点的中心的距离以及与第二组点的中心的距离来解决这个问题,然后,在比较它们之后,一组将没有匹配的距离——这是错误的点。

    #include <iostream>
#include <cmath>
#include <math.h>
using namespace std;
int main()
{
int star1, star2;
cin>>star1;
int x1[star1], y1[star1];
for (int i=0; i<star1; i++)
{cin>>x1[i]>>y1[i];}

cin>>star2;
int x2[star2], y2[star2];
for (int i=0; i<star2; i++)
{cin>>x2[i]>>y2[i];}

int d1[star1], d2[star2];
for (int i=0; i<star1; i++)
{d1[i]=sqrt(x1[i]*x1[i]+y1[i]*y1[i]);
d2[i]=sqrt(x2[i]*x2[i]+y2[i]*y2[i]);
}
int dis=0; //the ones furthest from the center will be gone

if (star1>star2)
{for (int i=0; i<(star1-star2); i++)
{if (d1[i]<d1[i+1])
{dis=i+1;} }

for (int i = dis; i < star1; i++)
{d1[dis] = d1[dis+1];
d1[star1-1] = 0;}
}

else if (star2>star1)
{for (int i=0; i<(star2-star1); i++)
{if (d2[i]<d2[i+1])
{dis = i+1;} }

for (int i = dis; i < star2; i++)
{d2[dis] = d2[dis+1];
d2[star2-1] = 0;}
}

int one, two;
for (int begin=0; begin<star1; begin++)
{
for (int i=0; i<star2; i++)
{if (d1[begin]==d2[i])
{one=begin; two=i;
goto finish;}}
}
finish:
cout<<one<<" "<<two;
}

原始问题:http://www.codeabbey.com/index/task_view/wandering-star是我的代码有问题,还是我的解释有问题?

最佳答案

我在您的方法中看到的第一个问题是您假设旋转点是原点。如果集合已围绕不同的点旋转怎么办?

此外,在我看来,您发布的链接上的提示说第二张图片与第一张图片有轻微的旋转和轻微的偏移。这意味着两组中的旋转点可能不同。另外,请注意问题陈述表明边缘附近的恒星可能会离开图像空间。这种情况需要考虑。

试着想一想如何找到每个图像中的旋转点。它有什么属性,有什么方法可以使用几何属性来隔离它?如果您能够获得两个旋转点,您将能够按照您建议的解决方案进行类似的处理。

关于c++ - 无法理解绘图程序中的错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37759067/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com