当前位置 - 股票行情交易網 - 文娛動態 - c ++ 轉向問題

c ++ 轉向問題

#include <iostream>

#include <math.h>

using namespace std;

class point

{

public:

//*默認構造

point(){x = 0,y = 0;}

//*賦值函數

void fuzhi(int x1,int y1);

//*兩點間距離的

double juli(point r);

//*判斷拐角是否是直角

bool ifzhijiao(point r1,point r3);

//*判斷是否在壹條直線上

bool ifzhixian(point r1,point r3);

//判斷最終拐向

bool guaixiang(point r1,point r3);

//*點成

int diancheng(point r);

//*相減

void jian(point r);

//*將p2移動到原點,p1,p3對應移動

void movetozero(point &r1,point &r3);

//*判斷壹個點在第幾象限

float whatxian(point p);

//*判斷是否有點在坐標軸上

bool ifzuobiaozhou(point p);

//*判斷點在那個坐標軸上

int whatzhou(point p);

int x;

int y;

};

//賦值函數

void point::fuzhi(int x1,int y1)

{

x = x1;

y = y1;

}

//判斷兩點間距離

double point::juli(point r)

{

double a2 = 0;

a2 = (r.y - y)*(r.y - y) + (r.x - x)*(r.x - x);

return sqrt(a2);

}

//判斷拐角是否是直角

bool point::ifzhijiao(point r1,point r2)

{

r1.jian(*this);

r2.jian(*this);

return !r1.diancheng(r2);

}

//相減

void point::jian(point r)

{

x -= r.x;

y -= r.y;

}

//點成

int point::diancheng(point r)

{

return (x*r.x + y*r.y);

}

//判斷是否在壹條直線上

bool point::ifzhixian(point r1,point r3)

{

// cout << r1.juli(r3) << endl;

// cout << juli(r1) << endl;

// cout << juli(r3) << endl;

if (fabs(r1.juli(r3) - juli(r1) - juli(r3))<=0.01 ){

return 1;

}else{

return 0;

}

}

//判斷最終拐向

bool point::guaixiang(point r1,point r3)

{

if(ifzhixian(r1,r3)){

cout << "TOWARDS" << endl;

}else{

//把p2移動到原點

movetozero(r1,r3);

if(ifzhijiao(r1,r3)){//拐角為直角

if(ifzuobiaozhou(r1)){//p1在坐標軸上

if(((whatzhou(r1) - whatzhou(r3))==1)||((whatzhou(r1) - whatzhou(r3))==-3))

{

// cout << "(whatzhou(r1)" << whatzhou(r1) << endl;

// cout << "(whatzhou(r3)" << whatzhou(r3) << endl;

// cout << "A的橫坐標: " << r1.x << endl;

// cout << "A的縱坐標: " << r1.y << endl;

// cout << "C的橫坐標: " << r3.x <<endl;

// cout << "C的縱坐標: " << r3.y << endl;

cout << "LIFT" << endl;

}else{

cout << "RIGHT" << endl;

}

}else{

if((whatxian(r1) - whatxian(r3) == 1)||(whatxian(r1) - whatxian(r3) == -3 )){

cout << "LEFT" << endl;

}else{

cout << "RIGHT" << endl;

}

}

}else{

cout << "既不直走,又不拐90度的彎" << endl;

}

}

return 0;

}

//將p2移動到原點,p1,p3對應移動

void point::movetozero(point &r1,point &r3)

{

r1.x -= x;

r1.y -= y;

r3.x -= x;

r3.y -= y;

x = 0;

y = 0;

}

//判斷壹個點在第幾象限,若是x軸正方向則為1.1,負方向1.2 y軸正方向2.1,負方向2.2

float point::whatxian(point p)

{

//原點

if(ifzuobiaozhou(p)){

cout << "改點在坐標軸上" << endl;

return (float)0.1;

}

if(p.x == 0 && p.y == 0){

return 0;

}else if(p.x > 0 && p.y >0){//第壹象限

return 1;

}else if(p.x >0 && p.y < 0){//第四象限

return 4;

}else if(p.x <0 && p.y < 0){//第三象限

return 3;

}else if(p.x < 0 && p.y > 0){//第二象限

return 2;

}

return -1;

}

//判斷是否有點在坐標軸上

bool point::ifzuobiaozhou(point p)

{

return (p.x == 0 || p.y == 0);

}

//判斷點在那個坐標軸上

int point::whatzhou(point p)

{

if(p.y == 0){

if(p.x > 0){

return 1;

}else{

return 3;

}

}else if(p.x == 0){

if(p.y > 0){

return 2;

}else{

return 4;

}

}

else{

cout << "改點不在坐標軸上 " << endl;

return 0;

}

}

int main()

{

//賦值

point p[3];

for(int i = 0;i <= 2;i++){

int x,y;

cout << "第" << i+1 <<"個點的橫坐標:" ;

cin >> x;

cout << "第" << i+1 <<"個點的縱坐標:" ;

cin >> y;

p[i].fuzhi(x,y);

}

p[1].guaixiang(p[0],p[2]);

return 0;

}

//寫得粗略了些

//如有bug,告訴我,再改,,