2009-10-28 68 views
20

Giả sử góc trên bên trái là (0,0) và tôi được cho một góc 30 độ, điểm bắt đầu là (0,300), chiều dài đường là 600 , làm cách nào để tính điểm kết thúc của đường như vậy là rằng đường thẳng đại diện cho góc được đưa ra.Cho góc và chiều dài, cách tính tọa độ

C pseudo-code đang

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

tôi giả sử bạn muốn loại (int *) cho end_x và end_y, cũng như lật các bài tập của bạn vào khoảng cuối của hàm. –

+0

Cảm ơn, tôi muốn các giá trị được tính toán. Chỉnh sửa để phản ánh điều đó. – amanda

+0

Anh ấy có nghĩa là chữ ký chức năng của bạn là xấu. Tôi sẽ sửa chữa nó. –

Trả lời

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()' và 'sin()' lấy radian, hãy cẩn thận. –

+4

radians = pi * độ/180 – Brian

+0

Điều đó làm việc hoàn hảo ... đôi khi tôi làm những việc quá khó. Cảm ơn nhiều! – amanda

1

math.h có tất cả các hàm lượng giác bạn nên cần. Bạn có thể cần phải cung cấp -lm cho trình liên kết của mình, tùy thuộc vào hệ thống bạn đang xây dựng (đôi khi nó tự động).

1

Bạn không nói góc được đo tương ứng với hoặc thực sự hướng trục của bạn đi. Những điều này sẽ tạo nên sự khác biệt.

Trước tiên, bạn cần phải chuyển đổi từ độ sang radian (nhân với PI và chia cho 180). Sau đó, bạn cần phải lấy sin và cosin góc của bạn và nhân chúng bằng chiều dài của dòng. Bây giờ bạn có hai số cho tọa độ của bạn, nhưng nó phụ thuộc vào hướng mà trục của bạn đi và từ nơi bạn đo góc của các giá trị này là tọa độ x và đó là y, và liệu chúng có bị phủ định hay không.

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

Mọi người đang quên thư viện complex trong C++, chuyển đổi cực sang hình chữ nhật cho chúng tôi.

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

Tôi cũng nên cẩn thận với thuật ngữ bạn đã chọn. Khi tôi nhìn thấy get trong một tên, tôi nghĩ về nó như là lấy một câu trả lời được lưu trữ ở đâu đó. Trong ví dụ này, chúng tôi đang tính toán thứ gì đó và đó có thể là sự đảm bảo sai cho người dùng mã của bạn.

Các vấn đề liên quan