Red de conocimiento informático - Conocimiento del nombre de dominio - Urgente: Gráficos por computadora: método de recorte de punto medio de recorte de línea o codificación de código de recorte en c++

Urgente: Gráficos por computadora: método de recorte de punto medio de recorte de línea o codificación de código de recorte en c++

#include

#include

#include "iostream.h"

int x0,y0,x1 ,y1;

int Max(int ​​​​a,int b,int c)

{

if(a>b)

{

si(a>c)

devuelve a;

en caso contrario

devuelve c;

}

En caso contrario

{

if(b>c)

return b;

En caso contrario

Devuelve c;

}

}

int Min(int a,int b,int c)

{

si(a

{

si(a

devuelve un;

else

return c;

}

else

{

if(b

devolver b;

más<

devolver c;

}

}

void DrawLine1(int x0,int y0,int x1,int y1)

{

int d,temp;

temp=y0;

d=2*(y1- y0)-(x1-x0);

glBegin(GL_POINTS);

glVertex2d(x0,y0);

glEnd();

for(int k=x1;k

{

if(d > ;= 0)

{

glBegin(GL_POINTS);

glVertex2d(k,temp+1);

glEnd() ;

d=d+2*(y1-y0)-2*(x1-x0);

temp= temp+1;

}

else

{

glBegin(GL_POINTS);

glVertex2d(k,temp);

glEnd(

d=d+2*(y1-y0);

temp=temp;

}

}

glBegin(GL_POINTS);

glVertex2d(x1,y1);

glEnd();

}

void DrawLine2 (int x0,int y0,int x1,int y1)

{

int d,temp;

temp=x0;

d=2*(x1-x0)-(y1-y0);

glBegin(GL_POINTS);

glVertex2d(x0, y0);

glEnd();

for(int k=y1;k

{

if(d>=0)

{

glBegin(GL_POINTS);

glVertex2d( temp+1,k

glEnd();

d=d); +2*(x1-x0)-2*(y1-y0);

temp=temp+1;

}

más

{

glBegin(GL_POINTS);

glVertex2d(temp,k);

glEnd();

d= d+2*(x1-x0);

temp=temp;

}

}

más

{

glVertex2d(x1-x0);

temp=temp;

}

más

glBegin(GL_POINTS);

glVertex2d(x1,y1);

glEnd();

}

void DrawTriangle(int x0,int y0,int x1,int y1,int x2,int y2)

{

int xmin,xmax, ymin,ymax;

flotar a ,b,c;

xmin=Min(x0,x1,x2);

xmax=Max(x0,x1,x2);

ymin= Min(y0,y1,y2);

ymax=Max(y0,y1,y2);

glColor3f(1.0f,0.0f,0.0f);

glBegin(GL_POINTS);

glVertex2d(x0,y0);

glEnd();

glColor3f(0.0f,1.0f, 0.0f );

glBegin(GL_POINTS);

glVertex2d(x1,y1);

glEnd();

glColor3f(0.0f ,0.0f,1.0f);

glBegin(GL_POINTS) ;

glVertex2d(x2,y2);

glEnd();

for(float n=ymin;n<=ymax;n++)

for(float m=xmin;m

{

a=((y1-y2)*m+(x2-x1)*n+x1*y2-x2*y1)/((y1-y2)*x(x2-x1)*yx1*y2-x2* y1);

b=((y2-y0)*m+(x0-x2)*n+x2*y0-x0*y2)/((y2-y0)*x1+( x0-x2) *y1+x2*y0-x0*y2);

c=((y0-y1)*m+(x1-x0)*n+x0*y1-x1*y0)/((y0- y1)*x2+(x1-x0)*y2+x0*y1-x1*y0);

if(a>0 && b& gt;0 && c>0)

{

color flotante0=a*1.0;

color flotante1=b*1.0;

color flotante2=c*1.0;

glColor3f(color0,co

lor1,color2);

glBegin(GL_POINTS);

glVertex2d(m,n);

glEnd();

}

}

void display()

{

/* Borrar todos los píxeles*/

glClear (GL_COLOR_BUFFER_BIT);

glColor3f (1.0, 1.0, 1.0);

glBegin(GL_POINTS);

glVertex2d(x, y); El medio es la coordenada del punto

glEnd();

*/

/* La siguiente declaración dibuja un cuadrado blanco*/< / p>

if((y1-y0)/(x1-x0)<=1)

{

DrawLine1( x0,y0,x1,y1);

}

else

{

DrawLine2(x0,y0,x1,y1);

}

DrawTriangle(35,35,135,185,235,35);

/* ¡No esperes!

* Comenzar a manejar rutinas OpenGL almacenadas en búfer

*/

glFlush ();

}

void init (void)

{

/* Seleccionar color transparente*/

glClearColor (0.0, 0.0, 0.0, 0.0);

/* Inicializa el valor de la vista*/

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0, 600, 0, 600); /p>

}

/*

* Declarar el tamaño, la posición y el modo de visualización de la ventana inicial

* (búfer único y modo de visualización). Abra la ventana y la barra de título mostrará "hola"

*. Llame a la rutina de inicialización.

* Registra la función de devolución de llamada para mostrar gráficos.

* Ingresar al bucle principal y manejar eventos. Ingrese al bucle principal y maneje los eventos.

*/

int main(int argc, char** argv)

{

cout<< "entrada x0,y0 ,x1,y1 :"<<.endl;

cin>>x0>>y0>>x1>>y1;

glutInit(&argc, argv);

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);

/Establecer el tamaño de la ventana en píxeles

glutInitWindowSize (600, 600);

glutInitWindowPosition (100, 100

glutCreateWindow ( "hola");

init ();

glutDisplayFunc(pantalla

glutMainLoop() );

return 0; /* ANSI C requiere que main devuelva int.

*

}

//// Escribí esto antes, no sé si funciona