#include <math.h>
#include<iostream>
using namespace std;
double retTwo(double num);//保留两位小数
int main()
{
double a=0, b=0, c=0;//未知量
double Length=0;
cout << "--------------------------" << endl;
cout << "请输入未知点到原点的距离" << endl;
cin >> Length;
Length = retTwo(Length);
double x=0, y=0, z=0;
cout << "--------------------------" << endl;
cout << "请输入已知点的坐标" << endl;
cin >> x >> y >> z;
x = retTwo(x);
y = retTwo(y);
z = retTwo(z);
cout << "--------------------------" << endl;
double degx_y = 0;
cout << "请输入未知点到原点的直线与X-Y面的角度" << endl;
cin >> degx_y;
degx_y = retTwo(degx_y);
cout << "--------------------------" << endl;
double deg = 0;
cout << "请输入未知点到原点的直线与已知点到原点的直线的角度" << endl;
cin >> deg;
deg = retTwo(deg);
cout << "--------------------------" << endl;
cout << "--------------------------" << endl;
//----------------------------------------算法部分
/*
可以得知有两个向量:未知m=(a,b,c)和已知n=(x,y,z)可以有第一个方程
cos(deg)=m*n/|m|*|n|
由未知点到原点的距离可以有第二个方程
Length=sqrt(x*x+y*y+z*z)
由未知点到原点的直线与X-Y面的角度可以有第二个方程
sin(degx_y)=c/Length
*/
//由第三个方程可以得出c=sin(degx_y)*Length;
c = sin(degx_y)*Length;
//cos(degx_y)==(a*x+b*y+c*z)/(sqrt(a*a+b*b+c*c)*sqrt(x*x+y*y+z*z))
for (a = 0 - Length; a <= 0; a = a + 0.01)
{
for (b = 0 - Length; b <= 0; b = b + 0.1)
{
//sqrt(a*a + b * b + c * c)==Length
double Len = sqrt(a*a + b * b + c * c);
Len = retTwo(Len);
//cos(degx_y)==(a*x+b*y+c*z)/(sqrt(a*a+b*b+c*c)*sqrt(x*x+y*y+z*z))
double Cos = cos(degx_y);
Cos = retTwo(Cos);
double Sqr = (a*x + b * y + c * z) / (sqrt(a*a + b * b + c * c)*sqrt(x*x + y * y + z * z));
Sqr = retTwo(Sqr);
if (Length == Len && Cos == Sqr)
{
cout << a << " " << b << " " << c << endl;
goto A;
}
}
}
;
A :
for (a = 0; a <= Length; a = a + 0.01)
{
for (b = 0; b <= Length; b = b + 0.1)
{
//sqrt(a*a + b * b + c * c)==Length
double Len = sqrt(a*a + b * b + c * c);
Len = retTwo(Len);
//cos(degx_y)==(a*x+b*y+c*z)/(sqrt(a*a+b*b+c*c)*sqrt(x*x+y*y+z*z))
double Cos = cos(degx_y);
Cos = retTwo(Cos);
double Sqr = (a*x + b * y + c * z) / (sqrt(a*a + b * b + c * c)*sqrt(x*x + y * y + z * z));
Sqr = retTwo(Sqr);
if (Length == Len && Cos == Sqr)
{
cout << a << " " << b << " " << c << endl;
goto B;
}
}
}
B :
return 0;
}
double retTwo(double num)
{
double T = (int)(num );
return T;
}
版权所有:留学生程序网 2020 All Rights Reserved 联系方式:QQ:99515681 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。