Está en la página 1de 24

Gabriel Martin Montiel

91823

K049

GRAFICACIÓN

Mtro. Eduardo Pazos Gutierrez 

2. Programación con OpenGL

El Tephé, Ixmiquilpan, Hidalgo, México.


De acuerdo a los conceptos del subtema 2.1 “Sistema de coordenadas rectangulares”,
crea un programa que grafique funciones en términos de coordenadas cartesianas,
siguiendo el proceso que a continuación se describe:

a. Crea un proyecto en JOGL dentro de NetBeans.

b. Ponle el siguiente nombre al proyecto: “GraficaCartesiano”, y el nombre del paquete al


que pertenece el proyecto debe ser “Graficacion”.

c. Ya creado el código fuente, realiza los pasos del algoritmo 1 y 2, pero en el método
“display” pon el código que aparece en el subtema de 2.1.4 “Rastreo de otras curvas”.

d. Compila y ejecuta el código y guardar la pantalla de ejecución del programa.

e. Modifica el programa para que grafique las siguientes funciones:

i. y = ecos(x)

ii. y = ex^2
 El código utilizado para realizar este ejercicio es el siguiente:

package Graficacion;

import com.sun.opengl.util.Animator;

import java.awt.Frame;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.media.opengl.GL;

import javax.media.opengl.GLAutoDrawable;

import javax.media.opengl.GLCanvas;

import javax.media.opengl.GLEventListener;

import javax.media.opengl.glu.GLU;

public class GraficaCartesiano implements GLEventListener {

public static void main(String[] args) {

Frame frame = new Frame("GraficaCartesiano ");

GLCanvas canvas = new GLCanvas();

canvas.addGLEventListener(new GraficaCartesiano());
frame.add(canvas);

frame.setSize(640, 480);

final Animator animator = new Animator(canvas);

frame.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

new Thread(new Runnable() {

public void run() {

animator.stop();

System.exit(0);

}).start();

});

frame.setLocationRelativeTo(null);

frame.setVisible(true);

animator.start();

public void init(GLAutoDrawable drawable) {


GL gl = drawable.getGL();

System.err.println("INIT GL IS: " + gl.getClass().getName());

gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {

GL gl = drawable.getGL();

GLU glu = new GLU();

gl.glMatrixMode(GL.GL_PROJECTION);

gl.glLoadIdentity();

glu.gluOrtho2D(0.0, 640.0, 0.0, 480.0);

public void display(GLAutoDrawable drawable) {

GL gl = drawable.getGL();
gl.glClear(GL.GL_COLOR_BUFFER_BIT);

gl.glColor3f(1,1,1);

double x, y;

double xmin, xmax, ymin, ymax;

double xpmin, xpmax, ypmin, ypmax;

double xpc, ypc;

double xp, yp;

double deltaX, deltaY;

xpmax = 640;

xpmin = 0;

ypmax = 480;

ypmin = 0;

xpc = (xpmin + xpmax)/2;

ypc = (ypmin + ypmax)/2;

gl.glBegin(GL.GL_LINES);
gl.glVertex2d(xpmin, ypc);

gl.glVertex2d(xpmax, ypc);

gl.glVertex2d(xpc, ypmin);

gl.glVertex2d(xpc, ypmax);

gl.glEnd();

gl.glColor3f(1, 1, 0);

xmin = -10;

xmax = 10;

ymin = -10;

ymax = 10;

deltaX = xpc/xmax;

deltaY = ypc/ymax;

x = xmin;

while (x<=xmax)

y=x*x;

//y = Math.exp(x);

//y = Math.cos(x);
xp = xpc + x * deltaX;

yp = ypc + y * deltaY;

gl.glBegin(GL.GL_POINTS);

gl.glVertex2d(xp, yp);

gl.glEnd();

x = x + 1.0/deltaX;

gl.glFlush();

public void displayChanged(GLAutoDrawable drawable, boolean modeChanged,


boolean deviceChanged) {

De acuerdo a los conceptos estudiados en el subtema 2.2 “Sistema de coordenadas


polares”, crea un programa que grafique funciones en términos de coordenadas polares,
siguiendo el proceso que a continuación se describe:

g. Crea un proyecto en JOGL dentro de NetBeans.

h. Ponle el siguiente nombre al proyecto: “GraficaPolar”, y el nombre del paquete al que


pertenece el proyecto debe ser “Graficacion”.

i. Ya creado el código fuente realiza los pasos del algoritmo 1 y 2 (de Sistema de
coordenadas rectangulares), pero en el método “display” pon el código que aparece en el
tema de “Sistema de coordenadas polares”.

j. Compila y ejecuta el código y guarda la pantalla de ejecución del programa.


k. Modifica el programa para que grafique las siguientes funciones:

i. r = a (1 + sen θ) donde a = 100.

ii. r = a – (b cos θ) donde a = 100 y b = 150


 El código utilizado para realizar este ejercicio es el siguiente:

package Graficacion;

import com.sun.opengl.util.Animator;
import java.awt.Frame;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.media.opengl.GL;

import javax.media.opengl.GLAutoDrawable;

import javax.media.opengl.GLCanvas;

import javax.media.opengl.GLEventListener;

import javax.media.opengl.glu.GLU;

public class GraficaPolar implements GLEventListener {

public static void main(String[] args) {

Frame frame = new Frame("GraficaPolar");

GLCanvas canvas = new GLCanvas();

canvas.addGLEventListener(new GraficaPolar());

frame.add(canvas);

frame.setSize(640, 480);

final Animator animator = new Animator(canvas);

frame.addWindowListener(new WindowAdapter() {
@Override

public void windowClosing(WindowEvent e) {

new Thread(new Runnable() {

public void run() {

animator.stop();

System.exit(0);

}).start();

});

frame.setLocationRelativeTo(null);

frame.setVisible(true);

animator.start();

public void init(GLAutoDrawable drawable) {

GL gl = drawable.getGL();

System.err.println("INIT GL IS: " + gl.getClass().getName());


gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {

GL gl = drawable.getGL();

GLU glu = new GLU();

gl.glMatrixMode(GL.GL_PROJECTION);

gl.glLoadIdentity();

glu.gluOrtho2D(0.0, 640.0, 0.0, 480.0);

public void display(GLAutoDrawable drawable) {

GL gl = drawable.getGL();

gl.glClear(GL.GL_COLOR_BUFFER_BIT);

gl.glColor3f(1,1,1);
double x, y, a, pi, r, theta, i, b;

double xmin, xmax, ymin, ymax;

double xpmin, xpmax, ypmin, ypmax;

double xpc, ypc;

double xp, yp;

double deltaX, deltaY;

xpmax = 640;

xpmin = 0;

ypmax = 480;

ypmin = 0;

xpc = (xpmin + xpmax)/2;

ypc = (ypmin + ypmax)/2;

gl.glBegin(GL.GL_LINES);

gl.glVertex2d(xpmin, ypc);

gl.glVertex2d(xpmax, ypc);

gl.glVertex2d(xpc, ypmin);

gl.glVertex2d(xpc, ypmax);

gl.glEnd();
gl.glColor3f(1, 1, 0);

xmin = -10;

xmax = 10;

ymin = -10;

ymax = 10;

deltaX = xpc/xmax;

deltaY = ypc/ymax;

a = 100;

b = 150;

pi = Math.PI;

for (i=0; i<360; i++)

theta = i*pi/180;

r = a -b * Math.cos(theta);
x = r * Math.cos(theta);

y = r * Math.sin(theta);

xp = xpc + x;

yp = ypc + y;

gl.glBegin(GL.GL_POINTS);

gl.glVertex2d(xp, yp);

gl.glEnd();

gl.glFlush();

public void displayChanged(GLAutoDrawable drawable, boolean modeChanged,


boolean deviceChanged) {