Frage

Unter der Annahme, die obere linke Ecke (0,0) ist, und ich bin einen Winkel von 30 Grad, einen Ausgangspunkt (0,300), eine Leitungslänge von 600 gegeben, wie ich den Endpunkt der Linie, so berechne dass die Linie ist repräsentativ für den Winkel angegeben.

Der C Pseudo-Code ist

main() {
  int x,y;

  getEndPoint(30, 600, 0, 300, &x, &y);
  printf("end x=%d, end y=%d", x, y);
}

// input angle can be from 0 - 90 degrees

void getEndPoint(int angle, int len, int start_x, int start_y, int *end_x, int *end_y) 
{

    calculate the endpoint here for angle and length

    *end_x = calculated_end_x;
    *end_y = calculated_end_y;
}
War es hilfreich?

Lösung

// edit to add conversion
    #define radian2degree(a) (a * 57.295779513082)
    #define degree2radian(a) (a * 0.017453292519)

        x = start_x + len * cos(angle);
        y = start_y + len * sin(angle);

Andere Tipps

// Here is a complete program with the solution in C and command-line parameters
// Compile with the math library: 
//    gcc -Wall -o point_on_circle -lm point_on_circle.c
//
// point_on_circle.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double inline degree2radian(int a) { return (a * 0.017453292519); }

void getEndPoint(double angle, int len, int start_x, 
    int start_y, int *end_x, int *end_y) {
        *end_x = start_x + len * cos(angle);
        *end_y = start_y + len * sin(angle);
} // getEndPoint

int main(int argc, char *argv[]) {
  double angle = atoi(argv[1]);
  int length   = atoi(argv[2]);
  int start_x  = atoi(argv[3]);
  int start_y  = atoi(argv[4]);
  int x, y;

  getEndPoint(degree2radian(angle), length, start_x, start_y, &x, &y);
  printf("end x=%d, end y=%d\n", x, y);

  return 0;
} // main

math.h hat alle trigonometrischen Funktionen sollten Sie benötigen. Möglicherweise müssen Sie -lm zu Ihren Linker geben, je nachdem, welches System Sie bauen auf (manchmal ist es automatisch).

Sie nicht sagen, was der Winkel relativ gemessen wird, oder in der Tat, welche Richtung Ihre Achsen gehen. Diese wird einen Unterschied machen.

Sie müssen zuerst von Grad in Radiant (multiplizieren mit PI und dividieren durch 180) konvertieren. Dann müssen Sie den Sinus und den Kosinus des Winkels nehmen und diese durch die Länge der Linie multiplizieren. Sie haben nun zwei Zahlen für Ihre Koordinaten, aber es hängt etwas helfen beim richtigen Achsen gehen und von wo aus Sie Ihre Winkeln sind zu messen, die von diesen Werten ist die x-Koordinate und das sind der y, und ob einer von ihnen muss negiert werden.

Die Menschen vergessen die complex Bibliothek in C ++, die für uns zu rechtwinkeligen Umrechnungen polar der Fall ist.

complex<double> getEndPoint(complex<double> const &startPoint, double magnitude, double radians)
{
    return startPoint + polar<double>(magnitude, radians);
}

int main()
{
    complex<double> startingPoint(0.0, 300.0);
    auto newPoint = getEndPoint(startingPoint, 600, 0.523598776);

    cout << newPoint << endl;
}

Ich würde auch mit dem gewählten Terminologie vorsichtig sein. Als ich get in einem Namen, ich denke, es als eine Antwort irgendwo gespeichert abgerufen werden. In diesem Beispiel sind die Berechnung wir etwas, und das könnte falsche Versicherung an einen Benutzer des Codes gegeben sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top