2016-06-11 129 views
0

有一個問題,他們在圖上有點(約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 是不是有毛病我的代碼,或有毛病我的解釋呢?

回答

0
int d1[star1], d2[star2]; 

d2陣列的大小是star2

for (int i=0; i<star1; i++) 
    {if (d1[begin]==d2[i]) 

內環,i,迭代從0到star1-1,但d2數組的大小是star2

這似乎是錯誤。這可能應該是:

for (int i=0; i<star2; i++) 
    {if (d1[begin]==d2[i]) 
1

我看到你的第一個問題是你假設旋轉點是原點。如果該組已經繞另一個點旋轉了會怎麼樣?

另外,在我看來,在你發佈的鏈接提示說第二個圖像是輕微的旋轉和從第一個微小的轉變。這意味着兩組的旋轉點可能不同。另請注意,問題說明表明邊緣附近的星形可能會離開圖像空間。這種情況需要考慮。

試着想想如何找到每個圖像中的旋轉點。它具有哪些屬性,並且有什麼方法可以使用幾何屬性來隔離它?如果您能夠獲得兩個輪換點,您可以按照您的建議解決方案進行操作。

+0

啊。在換擋部位錯過了。我必須考慮..... @。@ –