C++ c++;计算两个角度之间的所有角度
我有一组先前定义的浮点值(一组角度) 我需要一个函数,它以两个角度作为输入,并返回它们之间的所有角度。 用户首先在float中输入一组角度,然后用户可以输入任意两个角度(我的程序应该返回这些值之间的所有角度) 例如 30310(返回所有角度>=30和我猜类似于:C++ c++;计算两个角度之间的所有角度,c++,angle,C++,Angle,我有一组先前定义的浮点值(一组角度) 我需要一个函数,它以两个角度作为输入,并返回它们之间的所有角度。 用户首先在float中输入一组角度,然后用户可以输入任意两个角度(我的程序应该返回这些值之间的所有角度) 例如 30310(返回所有角度>=30和我猜类似于: for( int f = start; f != end; f = (f + 1) % 360 ) { // do something with f } 您的意思是说您的程序应该返回以前输入的一组角度中存在的所有角度吗 在这种
for( int f = start; f != end; f = (f + 1) % 360 ) {
// do something with f
}
您的意思是说您的程序应该返回以前输入的一组角度中存在的所有角度吗 在这种情况下,您只需要比较存储的值和两个输入角度- 对于(i=0;i
if(array[i]>=value1&&array[i]我明白你的要求。对于角度列表中的每个角度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;
}
#包括
#包括
#包括
bool angleIsBetween(浮动角度、浮动起点、浮动终点)
{
//如果角度超出范围[0360],则将其转换为
//该范围内的等效角度。
角度=fmod(角度,360.0f);
//如果开始>结束,则角度范围环绕0。
return(start=start&&angle=start | | angle这里有一个函数,可以打印给定范围内的所有角度。希望这对您有所帮助:
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;
}
空隙角(双a1,双a2){
int deg1,min1,sec1,deg2,min2,sec2;
双常数mult=0.016667;
双角度;
如果(a1==(int)a1){
deg1=a1;min1=0;sec1=0;
}否则{
deg1=a1;
min1=(int)(60*(a1-(int)a1));
sec1=(int)(60*((60*(a1-(int)a1))-min1)+0.5);
}
如果(a2==(int)a2){
deg2=a2-1;min2=59;sec2=60;
}否则{
deg2=a2;
min2=(int)(60*(a2-(int)a2));
sec2=(int)(60*((60*(a2-(int)a2))-min2)+0.5);
如果(sec2==0){
sec2=60;
min2--;
}
}
if(deg1)所有角度?不是有一个无穷大的数字吗?@Ruel-只有当你以某种方式限制输出时,范围才是有限的,例如整数或小数点后2位。我猜提问者误解了或没有充分传达任务。@abbas:你的要求没有明确。你的意思是什么"返回所有角度>=30,并且在30和31之间已经有无穷多的数字…@Ruel,我们可以用我们想要的小数精度来谈论小数度数。有一个连续的角度。换句话说,在30 0 0
和30 0 1
之间有无穷多的角度。作为一个类比:仅仅是因为墙上有一个时钟以小时为单位:分:秒,并不意味着我们不能以纳秒或任何其他任意小的单位来谈论时间。哦……这就是他所说的“环绕”的意思吗?是的……这是一个好方法,只要他在寻找整数。我想有点混乱。我有角度的输入,不是两个浮点数之间的角度,而是角度在我之前输入的一组角度之间。@TrickyM66:@TrickyM66:他还试图涵盖两种可能性和每种可能性的答案-评论的理由太多+提供从布局中受益的代码示例。+1用于对杂乱无章的规范给出模糊可信的解释…但我不相信:阿巴斯似乎认为他需要高中数学来解决这个问题,我只是不认为这比任何其他平凡的编程任务更具数学性(他说他很擅长).所有这些都非常令人困惑!我们被引导认为可能需要正弦、余弦等。通过fmod()处理负角度&>=360角度的方法很好。我相信这确实是OP所问的问题。这个问题虽然措辞非常糟糕,但实际上并不难理解,一旦你意识到没有(或很少有)涉及数学。不需要角度数学,只需像你所做的那样比较两个值,Emile。我不明白OP的困惑是什么。不过我想说一件事。我认为OP更喜欢得到角度列表,而不是角度是否在扇区中的列表。什么…见鬼…什么…这是什么?你意识到OP希望用户能够输入任意数量的角度,然后输入一个范围,并让程序输出他们首先输入的、在该范围内的任何角度,对吗?是否…这会输出一个范围内的每个角度,然后是第二个?哇。。。
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;
}