左上隅が(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;
}
// 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);
// 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
あなたは、角度が何に対して測定されるか、あるいは実際にあなたの軸がどの方向に進むかについては言いません。これらは違いを生むでしょう。
まず、度からラジアンに変換する必要があります(PIを掛け、180で割ります)。次に、角度の正弦と余弦を取り、これらに線の長さを掛ける必要があります。これで座標に2つの数値がありますが、軸の方向と角度の測定場所によって、これらの値のどちらがx座標で、どちらがyであるか、およびどちらかを否定する必要があるかどうかによって異なります。
math.h
には、必要なすべての三角関数があります。構築しているシステムによっては、リンカーに-lm
を指定する必要がある場合があります(自動の場合もあります)。
人々は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
が含まれている場合、それはどこかに保存されている回答を取得していると思います。この例では、何かを計算していますが、それはコードのユーザーに誤った保証を与える可能性があります。