Hellko

LINE

Feb 26th, 2013
428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #define NOL 2E-15
  4.  
  5. class line {
  6. private:
  7.     double qx,qy,qz;
  8.     double x,y,z;
  9. public:
  10.     line(int);
  11.     line(const line&);
  12.     line(double x=0, double y=0, double z=0, double qx=1, double qy=1, double qz=1);
  13.     void print(void);
  14.     bool online(double, double, double);
  15.     friend bool cross(line,line);
  16. };
  17. bool cross(line a, line b) {
  18.     double x1,x2,y1,y2,z1,z2,qx,qy,qz,px,py,pz,A;
  19.     x1=a.x;     x2=b.x;     px=b.qx;    qx=a.qx;
  20.     y1=a.y;     y2=b.y;     py=b.qy;    qy=a.qy;
  21.     z1=a.z;     z2=b.z;     pz=b.qz;    qz=a.qz;
  22.  
  23.     if(fabs(qx/px-qy/py) < NOL and fabs(qx/px-qz/pz) < NOL) return 0;
  24.     A=qx*(py*(z2-z1)-pz*(y2-y1))-qy*(px*(z2-z1)-pz*(x2-x1))+qz*(px*(y2-y1)-py*(x2-x1));
  25.     return (fabs(A) < NOL)  ?   1
  26.                             :   0;
  27.  
  28. }
  29.  
  30. bool line::online(double xx, double yy, double zz) {
  31.     double A,B,C;
  32.     A=(x-xx)/qx;
  33.     B=(y-yy)/qy;
  34.     C=(z-zz)/qz;
  35.     return (fabs(A-B)<NOL  &&  fabs(B-C)<NOL)   ?     1
  36.                                                 :     0;
  37.  
  38. }
  39.  
  40. void line::print(void) {
  41.     printf("\n\nPryamaya: ");
  42.     printf("\nx -%5.2lf     y -%5.2lf     z -%5.2lf",x,y,z);
  43.     printf("\n---------- = ---------- = ----------");
  44.     printf("\n%7.2lf%13.2lf%13.2lf",qx,qy,qz);
  45. }
  46.  
  47. line::line(int) {
  48.     printf("Vvedite Napravlyaushiy vector x,y,z: ");
  49.     scanf("%lf%lf%lf",&qx,&qy,&qz);
  50.     printf("Vvedite to4ky 4erez kotoryu proxodit pryamaya x,y,z: ");
  51.     scanf("%lf%lf%lf",&x,&y,&z);
  52. }
  53. line::line(const line &A) {
  54.     x=A.x;
  55.     y=A.y;
  56.     z=A.z;
  57.     qx=A.qx;
  58.     qy=A.qy;
  59.     qz=A.qz;
  60. }
  61. line::line(double xx, double yy, double zz, double qxx, double qyy, double qzz) {
  62.     x=xx;
  63.     y=yy;
  64.     z=zz;
  65.     qx=qxx;
  66.     qy=qyy;
  67.     qz=qzz;
  68. }
  69.  
  70. int main() {
  71.     line a(-2,0,1,2,-3,4);
  72.     line b(3,1,7,3,4,2);
  73.     if(a.online(0,0,0)) printf("YES ON_LINE\n");
  74.     if(cross(a,b)) printf("YES CROSS");
  75. }
Advertisement
Add Comment
Please, Sign In to add comment