2009-10-28 4 views
20

왼쪽 위 모서리가 (0,0)이고 30도 각도로 시작한다고 가정하면 (0,300)의 시작점과 600의 선 길이 , 어떻게 라인의 끝점을 계산합니까 주어진 각도를 대표하는 라인.각도와 길이가 주어지면 좌표를 계산하는 방법

는 C 의사 코드는

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; 
} 
+0

end_x 및 end_y에 대한 유형 (int *)을 원할뿐 아니라 함수 끝 부분에서 과제를 뒤집어 쓰고 싶다고 가정합니다. –

+0

감사합니다. 계산 된 값을 원했습니다. 그것을 반영하기 위해 편집 됨. – amanda

+0

그는 당신의 기능 서명이 나쁘다는 것을 의미합니다. 내가 고칠거야. –

답변

37
// 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); 
+12

'cos()'와'sin()'은 라디안을 취하므로주의하십시오. –

+4

라디안 = pi * degrees/180 – Brian

+0

완벽하게 작동했습니다 ... 가끔은 일을 너무 어렵게 만듭니다. 감사합니다! 매크로의 경우 – amanda

1

math.h 당신이 필요합니다 모든 삼각 함수를 가지고있다. 빌드하고있는 시스템에 따라 링커에 -lm을 제공해야 할 수도 있습니다 (때로는 자동).

1

각도가 축에 대해 상대적으로 측정되거나 축의 방향이 무엇인지 말하지 않습니다. 이것들은 차이를 만들 것입니다.

먼저도에서 라디안으로 변환해야합니다 (PI로 곱하고 180으로 나눕니다). 그러면 각도의 사인과 코사인을 가져와 선 길이만큼 곱해야합니다. 이제 좌표에는 두 개의 숫자가 있지만 축이가는 방향과 각도를 측정하는 위치에 따라이 값 중 어느 것이 x 좌표이고 어느 것이 y인지, 그리고 두 값 중 하나를 부정해야하는지 여부에 따라 달라집니다.

2
// 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 
0

사람들은 우리를 위해 직사각형의 전환에 극성 않는 C++에있는 complex 라이브러리를 잊고있다.

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

나는 또한 선택한 용어에주의해야합니다. 이름에 get이 표시되면 어딘가에 저장된 답변을 검색하는 것으로 생각합니다. 이 예에서 우리는 무언가를 계산하고 있으며 이것은 사용자의 코드에 대한 거짓 보증 일 수 있습니다.

관련 문제