2017-01-29 3 views
-2

Ich brauche Punkte um einen Viertelkreis im Gegenuhrzeigersinn zu generieren, aber mit meinem Programm kann ich im Uhrzeigersinn erzeugen. Unten ist mein Code.Umkehren einer Reihe von Punkten in C++

#include <iostream> 
#include <cmath> 
#include <fstream> 
#include <iomanip> 

using namespace std; 

int main() 
{ 
    int NumberPoints(10); 
    double x1; 
    const double PI = 3.14159; 
    double radius = 5; 
    double angle = 0.7853; //45 degrees 

    ofstream plot; 
    string plotDataFile("points.txt"); 
    plot.open(plotDataFile.c_str()); 

    for (int i = 0; i <= NumberPoints; i++) 
    { 
     x1 = angle/NumberPoints*i; 
     plot << setprecision(5) << radius * sin(x1) << " "; 
     plot << setprecision(5) << radius * cos(x1) << " " << endl; 
    } 
    plot.close(); 
} 

Ich bekomme folgende Ausgabe.

0 5 
0.39225 4.9846 
0.78208 4.9385 
1.1671 4.8619 
1.5449 4.7553 
1.9132 4.6195 
2.2697 4.4552 
2.6122 4.2634 
2.9386 4.0453 
3.2469 3.8023 
3.5352 3.5359 

Ich brauche Punkte im Format 3,5352 3,5359 3,2469 3,8023 2,9386 4,0453 . . Kann jemand mir helfen, meinen Code zu ändern oder mir eine Idee für das selbe zu geben.

+3

Es gibt eine [std :: reverse() ] (http://en.cppreference.com/w/cpp/algorithm/reverse) Funktion. –

+2

Haben Sie 'x1 = -angle/NumberPoints * i;' schon versucht? –

+0

@ πάνταῥεῖ Ja, ich habe es versucht. es tritt in den zweiten Quadranten ein. – Patrik

Antwort

0

iterieren nur rückwärts:

for (int i = NumberPoints; i >= 0; i--) 

By the way, Ihre Variable NumberPoints hat vermutlich falschen Namen. Beachten Sie, dass Sie 11 Punkte bekommen, nicht 10.

0

Wie wäre es damit?

for (int i = NumberPoints; i >= 0; i--) 
{ 
    x1 = angle/NumberPoints*i; 
    plot << setprecision(5) << radius * sin(x1) << " "; 
    plot << setprecision(5) << radius * cos(x1) << " " << endl; 
} 
0

Statt

for (int i = 0; i <= NumberPoints; i++) 

Verwendung

for (int i = NumberPoints; i >= 0; i--) 
+0

vielen Dank. Es funktionierte. – Patrik

+0

Gern geschehen. – MarianD

+1

Auf dieser Seite zeigen Sie Ihre Wertschätzung, indem Sie alle nützlichen Antworten aufwerten. Sie tun dies, indem Sie auf den Pfeil oben links in der Antwort klicken. Akzeptieren Sie außerdem die beste Antwort (wenn sie Ihre Frage tatsächlich beantwortet), indem Sie auf das Häkchen oben links neben der Antwort klicken. Das ist besser als danke in einem Kommentar zu sagen. Es hilft auch anderen zu sehen, dass Ihre Frage beantwortet wurde. –

0

sein

Eingang helfen können:

0 5 
0.39225 4.9846 
0.78208 4.9385 

std::vector< std::pair< std::string, std::string > > pair_of_point; 
pair_of_point.emplace_back("0", "5"); 
pair_of_point.emplace_back("0.39225", "4.9846"); 
pair_of_point.emplace_back("0.78208", "4.9385"); 

std::reverse(pair_of_point.begin(), pair_of_point.end()) ; 

std::cout << pair_of_point[ 0 ].first << " " << pair_of_point[ 0 ].second << std::endl; 
std::cout << pair_of_point[ 1 ].first << " " << pair_of_point[ 1 ].second << std::endl; 
std::cout << pair_of_point[ 2 ].first << " " << pair_of_point[ 2 ].second << std::endl; 

Ausgang

0.78208 4.9385 
0.39225 4.9846 
0 5 

Statt std :: string geben Sie Datum-Typ

Verwandte Themen