我有一组先前定义的浮点值(一组角度)我需要一个函数,该函数将两个角度作为输入并返回它们之间的所有角度。用户首先在浮点数中输入一组角度,然后用户可以输入任意两个角度(我的程序应该返回这些值之间的所有角度)例如 30,310(返回所有角度 >=30 和 <310 但也应该返回 310,30有效(角度应该环绕)
提前致谢
我明白你在问什么。对于角度列表中的每个角度 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
}
你的意思是说你的程序应该返回以前输入的一组角度中存在的所有角度吗?
在这种情况下,您只需要比较存储的值和两个输入角度。就像是-
for(i=0; i < array_length; i++)
{
if(array[i] >= value1 && array[i] <= value2)
{
cout << array[i];
}
}
更好的方法可能是对先前存储的角度进行排序。在这种情况下,您不需要遍历所有存储的值。
如果您需要获得两个角度之间的所有角度,那么那是无限的(如果您不只考虑整数值)
这是一个打印给定范围内所有角度的函数。希望这可以帮助:
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;
}