以前に定義された float 値のセット (角度のセット) があります。入力として 2 つの角度を取り、それらの間のすべての角度を返す関数が必要です。ユーザーは最初に一連の角度を float で入力し、次にユーザーは任意の 2 つの角度を入力できます (私のプログラムはこれらの値の間のすべての角度を返す必要があります)。有効であること(角度はラップアラウンドする必要があります)
前もって感謝します
私はあなたが求めているものを手に入れます。角度のリスト内の各角度Aについて、Aが角度BとCで定義されたセクターに含まれているかどうかを知りたいと思います。B> Cの場合、セクターは角度Bで始まり、0度のマークを囲んで終了します。 Aで。
これがあなたが求めていることをするいくつかのコードです:
#include <vector>
#include <iostream>
#include <cmath>
bool angleIsBetween(float angle, float start, float end)
{
// If angle is outside the range [0,360), convert it to the
// equivalent angle inside that range.
angle = fmod(angle, 360.0f);
// If start>end, then the angle range wraps around 0.
return (start<=end) ? (angle>=start && angle<=end)
: (angle>=start || angle<=end);
}
int main()
{
float angles[] = {0.0, 180.0, 30};
size_t nAngles = sizeof(angles)/sizeof(angles[0]);
for (size_t i=0; i<nAngles; ++i)
{
std::cout << angleIsBetween(angles[i], 30.0, 310.0) << " ";
std::cout << angleIsBetween(angles[i], 310.0, 30) << " ";
}
std::cout << "\n";
return 0;
}
この出力:0 1 1 0 1 1
私は次のようなものを推測しています:
for( int f = start; f != end; f = (f + 1) % 360 ) {
// do something with f
}
あなたのプログラムは、以前に入力された角度のセットに存在するすべての角度を返す必要があると言うつもりですか?
その場合、保存された値と 2 つの入力角度を比較するだけです。何かのようなもの-
for(i=0; i < array_length; i++)
{
if(array[i] >= value1 && array[i] <= value2)
{
cout << array[i];
}
}
より良い方法は、以前に保存された角度をソートすることです。その場合、保存された値をすべてトラバースする必要はありません。
2つの角度の間のすべての角度を取得する必要がある場合、それは無限です(整数値のみを考慮していない場合)
これは、指定された範囲内のすべての角度を出力する関数です。お役に立てれば:
void angles(double a1, double a2) {
int deg1, min1, sec1, deg2, min2, sec2;
double const mult = 0.0166666667;
double angle;
if (a1 == (int)a1) {
deg1 = a1; min1 = 0; sec1 = 0;
} else {
deg1 = a1;
min1 = (int)(60 * (a1 - (int)a1));
sec1 = (int)(60 * ((60 * (a1 - (int)a1)) - min1) + 0.5);
}
if (a2 == (int)a2) {
deg2 = a2 - 1; min2 = 59; sec2 = 60;
} else {
deg2 = a2;
min2 = (int)(60 * (a2 - (int)a2));
sec2 = (int)(60 * ((60 * (a2 - (int)a2)) - min2) + 0.5);
if (sec2 == 0) {
sec2 = 60;
min2--;
}
}
if (deg1 <= deg2) {
cout << deg1 << " " << min1 << " " << sec1 << " < " << deg2 << " " << min2 << " " << sec2 << endl;
while (deg1 <= deg2) {
if (deg1 < deg2) {
while (min1 < 60) {
while (sec1 < 60) {
angle = deg1 + (min1 * mult) + (sec1 * mult * mult);
cout << deg1 << " " << min1 << " " << sec1 << " = " << angle << endl;
sec1++;
}
sec1 = 0;
min1++;
}
} else {
if (min1 < min2) {
while (min1 <= min2) {
if (sec1 < sec2) {
while (sec1 < 60) {
angle = deg1 + (min1 * mult) + (sec1 * mult * mult);
cout << deg1 << " " << min1 << " " << sec1 << " = " << angle << endl;
sec1++;
}
sec1 = 0;
min1++;
} else {
while (sec1 <= sec2) {
angle = deg1 + (min1 * mult) + (sec1 * mult * mult);
cout << deg1 << " " << min1 << " " << sec1 << " = " << angle << endl;
sec1++;
}
sec1 = 0;
min1++;
}
}
} else {
while (min1 < 60) {
while (sec1 < 60) {
angle = deg1 + (min1 * mult) + (sec1 * mult * mult);
cout << deg1 << " " << min1 << " " << sec1 << " = " << angle << endl;
sec1++;
}
sec1 = 0;
min1++;
}
}
}
min1 = 0;
deg1++;
}
}
}
int main() {
angles(40.3472, 40.5);
return 0;
}