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 "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); p> 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; } } p> 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) p> { 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