2016-06-11 9 views
0

Es gibt ein Problem, in dem sie Punkte auf einem Diagramm haben (~ 100 von ihnen) und sie drehen sich alle um einen bestimmten Betrag, außer einem von ihnen. Ich gehe also dieses Problem an, indem ich die Abstände von der Mitte der ersten Menge von Punkten und auch die Entfernung von der Mitte der zweiten Menge nehme, dann wird nach einem Vergleich ein Satz keine passende Entfernung haben - was falsch sein wird Punkt.Kann falsche Antwort in Graphikprogramm nicht verstehen

#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; 
    } 

Das ursprüngliche Problem: http://www.codeabbey.com/index/task_view/wandering-star Ist es etwas falsch mit meinem Code oder etwas falsch mit meiner Interpretation?

Antwort

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

Die Größe des Arrays ist d2star2.

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

Die innere Schleife, i, iteriert 0-star1-1, aber die Größe des Arrays ist d2star2.

Dies scheint der Fehler zu sein. Dies sollte wahrscheinlich sein:

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

Das erste Problem, das ich mit Ihnen Annäherung sehe, ist, dass Sie davon ausgehen, dass der Drehpunkt der Ursprung ist. Was ist, wenn das Set um einen anderen Punkt gedreht wurde?

Auch scheint mir, dass die Eingabeaufforderung bei der Verknüpfung, die Sie gebucht haben, sagt das zweite Bild ist eine leichte Drehungen und eine leichte Verschiebung von der ersten. Dies würde bedeuten, dass der Rotationspunkt in beiden Sätzen unterschiedlich sein könnte. Beachten Sie außerdem, dass die Problembeschreibung darauf hindeutet, dass ein Stern in der Nähe der Kante den Bildbereich verlassen kann. Dieser Fall müsste berücksichtigt werden.

Versuchen Sie darüber nachzudenken, wie Sie den Drehpunkt in jedem Bild finden. Welche Eigenschaften hat es und gibt es irgendwelche Möglichkeiten, wie Sie geometrische Eigenschaften verwenden können, um es zu isolieren? Wenn Sie beide Drehpunkte erhalten könnten, könnten Sie ähnlich wie Ihre vorgeschlagene Lösung vorgehen.

+0

ah. Auf dem wechselnden Teil verpasst. Ich muss darüber nachdenken ..... @. @ –