From 5d926f3e8ce82187a3e36a2924071b7e219a1bf2 Mon Sep 17 00:00:00 2001 From: sejo Date: Wed, 26 May 2021 09:55:15 -0500 Subject: =?UTF-8?q?cilindros=20con=20rango=20de=20=C3=A1ngulos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/notasP3D/cilindricos-y-conicos.md | 74 ++++++++++++++++++++++++++++++++--- 1 file changed, 68 insertions(+), 6 deletions(-) diff --git a/src/notasP3D/cilindricos-y-conicos.md b/src/notasP3D/cilindricos-y-conicos.md index 6343d78..c395f60 100644 --- a/src/notasP3D/cilindricos-y-conicos.md +++ b/src/notasP3D/cilindricos-y-conicos.md @@ -39,14 +39,13 @@ void cono(float r, float h, int N){ // N: número de divisiones en la base // variables auxiliares: - float x,y,angulo; + float x,y; beginShape(TRIANGLE_FAN); vertex(0,0,h); // vértice de la punta // ciclo para los vértices de la base - for(int i=0;i<=N;i=i+1){ - angulo = i*TWO_PI/N; + for(float angulo=0; angulo<=TWO_PI; angulo=angulo+TWO_PI/N){ x = r*cos(angulo); y = r*sin(angulo); vertex(x,y,0); @@ -55,6 +54,8 @@ void cono(float r, float h, int N){ } ``` + + ## Cono con base aleatoria ![](/img/conos-aleatorios.png) @@ -147,11 +148,10 @@ void cilindro(float r, float h, int N){ // N: número de divisiones en la base // variables auxiliares - float x,y,angulo; + float x,y; beginShape(QUAD_STRIP); - for(int i=0; i<=N; i=i+1){ - angulo = i*TWO_PI/N; + for(float angulo=0; angulo<=TWO_PI; angulo=angulo+TWO_PI/N){ x = r*cos(angulo); y = r*sin(angulo); // vértice en la base @@ -163,6 +163,35 @@ void cilindro(float r, float h, int N){ } ``` +### Variación: Cilindro con rango de ángulo + +Esta función permite determinar el ángulo de inicio y fin del cilindro. Nota que los ángulos se especifican en radianes. + +```java +void cilindro(float r, float h, int N, float anguloInicial, float anguloFinal){ +// dibuja un cilindro tradicional, en un rango específico de ángulo +// r: radio de la base +// h: altura +// N: número de divisiones en la base +// anguloInicial: a partir de qué ángulo empieza el cilindro (en radianes) +// anguloFinal: en qué ángulo termina el cilindro (en radianes) + + // variables auxiliares + float x,y; + + beginShape(QUAD_STRIP); + for(float angulo=anguloInicial; angulo<=anguloFinal; angulo += (anguloFinal-anguloInicial)/N){ + x = r*cos(angulo); + y = r*sin(angulo); + // vértice en la base + vertex(x,y,0); + // vértice en la tapa + vertex(x,y,h); + } + endShape(); +} +``` + ## Cilindro con base/tapa aleatoria ![](/img/cilindros-aleatorios.png) @@ -311,6 +340,39 @@ void cilindroCono(float r1, float r2, float h, int N){ } ``` +### Variación: rango de ángulos + +Esta versión de la función permite especificar el ángulo inicial y final de la figura. Nota que los ángulos son en radianes: + +```java +void cilindroCono(float r1, float r2, float h, int N, float anguloInicial, float anguloFinal) { + // dibuja un cilindro con base y tapa de diferente radio + // r1: radio de la base + // r2: radio de la tapa + // h: altura + // N: número de divisiones en la base/tapa + // anguloInicial: a partir de qué ángulo empieza el cilindro (en radianes) + // anguloFinal: en qué ángulo termina el cilindro (en radianes) + + // variables auxiliares + float x, y; + + beginShape(QUAD_STRIP); + for (float angulo=anguloInicial; angulo<=anguloFinal; angulo += (anguloFinal-anguloInicial)/N) { + x = r1*cos(angulo); + y = r1*sin(angulo); + // vértice en la base + vertex(x, y, 0); + + x = r2*cos(angulo); + y = r2*sin(angulo); + // vértice en la tapa + vertex(x, y, h); + } + endShape(); +} +``` + ## Cono-cilindro 2 ![](/img/cilindrocono-complejo.png) -- cgit v1.2.3