Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // laborator5.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <windows.h> // sunt mentionate fisiere (biblioteci) care urmeaza sa fie incluse
- #include <gl/freeglut.h> // nu trebuie uitat freeglut.h (sau glut.h sau gl.h & glu.h)
- #include <stdlib.h>
- #include <iostream>
- using namespace std;
- struct Point{
- double x,y;
- };
- Point A,B,C,M;
- bool IsInside=false;
- void drawBitmapText(char *string,float x,float y)
- {
- char *c;
- glRasterPos2f(x+10, y);
- for (c=string; *c != '.'; c++)
- {
- glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *c);
- }
- }
- void init (void) // initializare fereastra de vizualizare
- {
- glClearColor (1.0, 1.0, 1.0, 0.0); // precizeaza culoarea de fond a ferestrei de vizualizare
- glMatrixMode (GL_PROJECTION); // se precizeaza este vorba de o reprezentare 2D, realizata prin proiectie ortogonala
- gluOrtho2D (0.0, 800.0, 0.0, 600.0); // sunt indicate coordonatele extreme ale ferestrei de vizualizare
- }
- void desen (void) // procedura desenare
- {
- glPointSize (5.0);
- glBegin (GL_POINTS);
- glColor3f (0.0, 0.0, 1.0); // culoarea punctului de intersectie: albastru
- glVertex2i (A.x, A.y);
- glEnd ( );
- glBegin (GL_POINTS);
- glColor3f (0.0, 0.0, 1.0); // culoarea punctului de intersectie: albastru
- glVertex2i (B.x, B.y);
- glEnd ( );
- glBegin (GL_POINTS);
- glColor3f (0.0, 0.0, 1.0); // culoarea punctului de intersectie: albastru
- glVertex2i (C.x, C.y);
- glEnd ( );
- glBegin (GL_POINTS);
- glColor3f (1.0, 0.0, 0.0); // culoarea punctului de intersectie: albastru
- glVertex2i (M.x,M.y);
- glEnd ( );
- // segmentele
- glLineWidth (2.0);
- glBegin (GL_LINES);
- glColor3f (0.0, 1.0, 0.0); // culoarea celui de-al doilea segment: verde
- glVertex2i (A.x, A.y);
- glVertex2i (B.x, B.y);
- glColor3f (0.0, 1.0, 0.0); // culoarea celui de-al doilea segment: verde
- glVertex2i (B.x, B.y);
- glVertex2i (C.x, C.y);
- glColor3f (0.0, 1.0, 0.0); // culoarea celui de-al doilea segment: verde
- glVertex2i (C.x, C.y);
- glVertex2i (A.x, A.y);
- glEnd ( );
- glColor3f (1.0, 0.0, 0.0);
- if(IsInside==true)
- {
- char *p = "Inside.";
- drawBitmapText(p,M.x,M.y);
- }
- else
- {
- char *p = "Outside.";
- drawBitmapText(p,M.x,M.y);
- }
- // punctul de intersectie
- glFlush ( ); // proceseaza procedurile OpenGL cat mai rapid
- }
- float area(Point x1, Point x2, Point x3)
- {
- return abs((x1.x*(x2.y-x3.y) + x2.x*(x3.y-x1.y)+ x3.x*(x1.y-x2.y))/2.0);
- }
- bool isInside(Point x1, Point x2, Point x3, Point x)
- {
- /* Calculate area of triangle ABC */
- double A = area (x1,x2,x3);
- /* Calculate area of triangle PBC */
- double A1 = area (x,x2,x3);
- /* Calculate area of triangle PAC */
- double A2 = area (x1,x,x3);
- /* Calculate area of triangle PAB */
- double A3 = area (x1,x2,x);
- /* Check if sum of A1, A2 and A3 is same as A */
- return (A == A1 + A2 + A3);
- }
- void main (int argc, char** argv)
- {
- cout<<"xA=";cin>>A.x;
- cout<<"yA=";cin>>A.y;
- cout<<"xB=";cin>>B.x;
- cout<<"yB=";cin>>B.y;
- cout<<"xC=";cin>>C.x;
- cout<<"yC=";cin>>C.y;
- cout<<"xM=";cin>>M.x;
- cout<<"yM=";cin>>M.y;
- IsInside=isInside(A,B,C,M);
- glutInit (&argc, argv); // initializare GLUT
- glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); // se utilizeaza un singur buffer | modul de colorare RedGreenBlue (= default)
- glutInitWindowPosition (100, 100); // pozitia initiala a ferestrei de vizualizare (in coordonate ecran)
- glutInitWindowSize (800, 600); // dimensiunile ferestrei
- glutCreateWindow ("Lab 3- Exercitiul 4"); // creeaza fereastra, indicand numele ferestrei de vizualizare - apare in partea superioara
- init (); // executa procedura de initializare
- glClear (GL_COLOR_BUFFER_BIT); // reprezentare si colorare fereastra de vizualizare
- glutDisplayFunc (desen); // procedura desen este invocata ori de cate ori este nevoie
- glutMainLoop ( ); // ultima instructiune a programului, asteapta (eventuale) noi date de intrare
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement