Advertisement
Guest User

Untitled

a guest
Mar 24th, 2017
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.39 KB | None | 0 0
  1. // laborator5.cpp : Defines the entry point for the console application.
  2. //Pentru a afla daca un punct se afla in interiorul triunghiului sau in afara vom folosi M = alfa * A + beta * B + gama * c
  3. //astfel incat alfa + beta + gama = 1 si alfa, beta, gama >= 0
  4. // O1 = M + n(normala)
  5. // O2 = M - n(normala
  6.  
  7.  
  8. #include <windows.h> // sunt mentionate fisiere (biblioteci) care urmeaza sa fie incluse
  9. #include <gl/freeglut.h> // nu trebuie uitat freeglut.h (sau glut.h sau gl.h & glu.h)
  10. #include <stdlib.h>
  11. #include <iostream>
  12.  
  13. using namespace std;
  14.  
  15. struct Point{
  16. double x,y;
  17. };
  18.  
  19. Point A,B,C,M;
  20. bool IsInside=false;
  21.  
  22. void drawBitmapText(char *string,float x,float y)
  23. {
  24. char *c;
  25. glRasterPos2f(x, y);
  26.  
  27. for (c=string; *c != '.'; c++)
  28. {
  29.  
  30.  
  31. }
  32. }
  33.  
  34. void init (void) // initializare fereastra de vizualizare
  35. {
  36. glClearColor (1.0, 1.0, 1.0, 0.0); // precizeaza culoarea de fond a ferestrei de vizualizare
  37.  
  38. glMatrixMode (GL_PROJECTION); // se precizeaza este vorba de o reprezentare 2D, realizata prin proiectie ortogonala
  39. gluOrtho2D (0.0, 800.0, 0.0, 600.0); // sunt indicate coordonatele extreme ale ferestrei de vizualizare
  40. }
  41. void desen (void) // procedura desenare
  42. {
  43.  
  44. glPointSize (5.0);
  45.  
  46. glBegin (GL_POINTS);
  47. glColor3f (0.0, 0.0, 1.0); // culoarea punctului de intersectie: albastru
  48. glVertex2i (A.x, A.y);
  49. glEnd ( );
  50. glBegin (GL_POINTS);
  51. glColor3f (0.0, 0.0, 1.0); // culoarea punctului de intersectie: albastru
  52. glVertex2i (B.x, B.y);
  53. glEnd ( );
  54. glBegin (GL_POINTS);
  55. glColor3f (0.0, 0.0, 1.0); // culoarea punctului de intersectie: albastru
  56. glVertex2i (C.x, C.y);
  57. glEnd ( );
  58. glBegin (GL_POINTS);
  59. glColor3f (1.0, 0.0, 0.0); // culoarea punctului de intersectie: albastru
  60. glVertex2i (M.x,M.y);
  61. glEnd ( );
  62.  
  63.  
  64. // segmentele
  65. glLineWidth (2.0);
  66. glBegin (GL_LINES);
  67. glColor3f (0.0, 1.0, 0.0); // culoarea celui de-al doilea segment: verde
  68. glVertex2i (A.x, A.y);
  69. glVertex2i (B.x, B.y);
  70.  
  71. glColor3f (0.0, 1.0, 0.0); // culoarea celui de-al doilea segment: verde
  72. glVertex2i (B.x, B.y);
  73. glVertex2i (C.x, C.y);
  74.  
  75. glColor3f (0.0, 1.0, 0.0); // culoarea celui de-al doilea segment: verde
  76. glVertex2i (C.x, C.y);
  77. glVertex2i (A.x, A.y);
  78. glEnd ( );
  79.  
  80. glColor3f (1.0, 0.0, 0.0);
  81.  
  82. if(IsInside==true)
  83. {
  84.  
  85. char *p = "Inside.";
  86.  
  87. drawBitmapText(p,M.x,M.y);
  88. }
  89. else
  90. {
  91.  
  92. char *p = "Outside.";
  93.  
  94. drawBitmapText(p,M.x,M.y);
  95. }
  96.  
  97.  
  98.  
  99. // punctul de intersectie
  100.  
  101.  
  102.  
  103. glFlush ( ); // proceseaza procedurile OpenGL cat mai rapid
  104. }
  105.  
  106. float area(Point x1, Point x2, Point x3)
  107. {
  108. return abs((x1.x*(x2.y-x3.y) + x2.x*(x3.y-x1.y)+ x3.x*(x1.y-x2.y))/2.0);
  109. }
  110.  
  111. bool isInside(Point x1, Point x2, Point x3, Point x)
  112. {
  113. /* Calculate area of triangle ABC */
  114. double A = area (x1,x2,x3);
  115.  
  116. /* Calculate area of triangle PBC */
  117. double A1 = area (x,x2,x3);
  118.  
  119. /* Calculate area of triangle PAC */
  120. double A2 = area (x1,x,x3);
  121.  
  122. /* Calculate area of triangle PAB */
  123. double A3 = area (x1,x2,x);
  124.  
  125. /* Check if sum of A1, A2 and A3 is same as A */
  126. return (A == A1 + A2 + A3);
  127. }
  128.  
  129. void main (int argc, char** argv)
  130. {
  131.  
  132. cout<<"xA=";cin>>A.x;
  133. cout<<"yA=";cin>>A.y;
  134.  
  135. cout<<"xB=";cin>>B.x;
  136. cout<<"yB=";cin>>B.y;
  137.  
  138. cout<<"xC=";cin>>C.x;
  139. cout<<"yC=";cin>>C.y;
  140.  
  141. cout<<"xM=";cin>>M.x;
  142. cout<<"yM=";cin>>M.y;
  143.  
  144. IsInside=isInside(A,B,C,M);
  145.  
  146. glutInit (&argc, argv); // initializare GLUT
  147. glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); // se utilizeaza un singur buffer | modul de colorare RedGreenBlue (= default)
  148. glutInitWindowPosition (100, 100); // pozitia initiala a ferestrei de vizualizare (in coordonate ecran)
  149. glutInitWindowSize (800, 600); // dimensiunile ferestrei
  150. glutCreateWindow ("Lab 3- Exercitiul 4"); // creeaza fereastra, indicand numele ferestrei de vizualizare - apare in partea superioara
  151.  
  152. init (); // executa procedura de initializare
  153. glClear (GL_COLOR_BUFFER_BIT); // reprezentare si colorare fereastra de vizualizare
  154. glutDisplayFunc (desen); // procedura desen este invocata ori de cate ori este nevoie
  155. glutMainLoop ( ); // ultima instructiune a programului, asteapta (eventuale) noi date de intrare
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement