联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-23:00
  • 微信:codinghelp

您当前位置:首页 >> javajava

日期:2018-09-08 03:48


#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
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。