Aplicación de las desigualdades y la belleza del arte
En este artículo aprenderemos a colorear construcciones como esta, en la que las diferentes zonas no se corresponden con un objeto específico de GeoGebra.
Como sabemos, para colorear una región de la vista gráfica, podemos utilizar formas geométricas conocidas, como polígonos, circunferencias, elipses, etc.[br]Sin embargo, en ocasiones, necesitamos colorear una región del plano con partes curvas y rectas, agujeros, etc. [br]Para ello, podemos usar varios métodos, según el tipo de zona que necesitemos colorear:
GeoGebra colorea automáticamente las soluciones de los sistemas de inecuaciones, con lo que si utilizamos uno para expresar nuestra región, podremos colorearla.[br][br]Por ejemplo, para una zona de una [b]corona circular[/b].[br]Una posibilidad para dibujar figuras curvas (sin usar circunferencias "blancas" para tapar la parte que no queremos) es utilizar desigualdades con las que dibujar coronas circulares.[br][br]A veces, puede ser incómodo obtener la expresión de las desigualdades, pero podemos recurrir a dibujar la corona centrada en el origen, y luego trasladarla y girarla.
Por ejemplo, podemos usar este código para definir las desigualdades[br][quote]a1=Ángulo(Pizquierda)[br]a2=Ángulo(Pderecha)[br][br]x² + y² ≤ r1² ∧ x² + y² ≥ r2² ∧ (x < 0 ∨ y > tg(a2) x) ∧ (x > 0 ∨ y > tg(a1) x)[/quote]
En ocasiones, puede ser difícil expresar explícitamente con desigualdades la región que queremos. [br]En ese caso, podemos utilizar los comandos de GeoGebra para obtenerla.[br]Concretamente, los comandos [url=https://wiki.geogebra.org/es/Comando_PrimerMiembro]PrimerMiembro[/url] y [url=https://wiki.geogebra.org/es/Comando_SegundoMiembro]SegundoMiembro[/url].[br][br]Por ejemplo, vamos a colorear las zonas comunes a dos elipses, las zonas exteriores y, si queremos, la parte de la zona común que está por debajo de cierta recta.[br]En el applet, una vez definidas dos elipses y una recta, hemos definido las respectivas zonas como:[br][quote][code]zona1: PrimerMiembro(elipse1) ≤ SegundoMiembro(elipse1) [br] ∧ PrimerMiembro(elipse2) ≥ SegundoMiembro(elipse2)[br][br]zona2: PrimerMiembro(elipse2) ≤ SegundoMiembro(elipse2) [br] ∧ PrimerMiembro(elipse1) ≥ SegundoMiembro(elipse1)[br][br]intersección: PrimerMiembro(elipse2) ≤ SegundoMiembro(elipse2) [br] ∧ PrimerMiembro(elipse1) ≤ SegundoMiembro(elipse1)[br][br]intersección2: PrimerMiembro(elipse2) ≤ SegundoMiembro(elipse2) [br] ∧ PrimerMiembro(elipse1) ≤ SegundoMiembro(elipse1) [br] ∧ PrimerMiembro(recta1) - SegundoMiembro(recta1) < 0[br][/code][/quote][br][right](*) Método basado en las [url=https://help.geogebra.org/topic/how-can-i-styling-overlapping-part-of-two-circles-with-filling-of-hatching]observaciones[/url] de [url=https://www.geogebra.org/u/mathmagic]Juan Vicente Sánchez[/url].[/right]
Cuando podamos trazar el borde la la zona a colorear utilizando un [b]spline[/b], podemos seleccionarlo, cambiar su color y su "opacidad", para que esa región quede coloreada.[br]Si el spline no termina en el mismo punto que comenzó, se incluirá un tramo recto uniéndolos.[br][quote][code]s = Spline({A, B, C, D, E, F, G}, 3)[/code][/quote][quote][code]s2 = Spline({H, I, J, K, L, M, H})[/code][/quote][code][br][/code]
En ocasiones, podemos utilizar un [url=https://wiki.geogebra.org/es/Comando_LugarGeom%C3%A9trico]lugar geométrico[/url] para rellenar la zona del plano que queremos colorear, aunque este método no siempre colorea la región que nos interesa.[br]Para ello,[br][list][*]Definimos el contorno de la figura.[/*][*]Situamos un punto, por ejemplo [code]P1[/code], sobre la figura.[/*][*]Definimos otro punto que sea igual al anterior. Por ejemplo, [code]P2=P1[/code].[/*][*]La zona para rellenar será [code]relleno = LugarGeométrico(P2, P1)[/code].[/*][/list]
Por ejemplo, la figura del polígono, definido como [code]Pol[/code], con un agujero central, definido como [code]circ[/code], se puede crear con los comandos[br][quote][code]contorno = {Pol, circ}[br]P1 = Punto(contorno)[br]P2=P1[br]relleno = LugarGeométrico(P2, P1)[/code][/quote]
En este applet tenemos una versión simplificada de la construcción que hemos visto al comienzo.[br][list][*]Podemos modificar el número de [code]partes[/code] en que dividimos cada semicírculo, y la cantidad [code]n[/code] de grupos de sectores.[/*][*]Se ha dejado visible la vista algebraica, para que sea más sencillo analizar los elementos de la construcción.[/*][/list]Sus elementos son:[br][list][*]Puntos A y B para controlar el grosor de cada zona.[/*][*]Listas de puntos PA y PB, que determinan dónde comenzará cada una de las zonas iniciales. Las construiremos en el primer cuadrante.[/*][*]Las zonas iniciales, [code]Ec1[/code] y [code]Ec2[/code] que servirán para generar la figura a partir de rotaciones (podemos ocultarlas o hacerlas visibles pulsando en el círculo de la vista algebraica, junto su nombre).[br]Se han generado utilizando desigualdades.[/*][*]Cuatro listas Parte1,...,Parte4, que consisten en rotar las zonas iniciales. Las definimos de manera independiente para poder cambiar sus colores.[/*][*]Todas las desigualdades llevan el grosor de línea a 0 para que no se muestren los bordes.[/*][*]Generamos los [code]Bordes[/code] mediante arcos y segmentos, de manera idependiente.[/*][/list]
Aquí tenemos la definición de los elementos de esta construcción:[br][quote][code]partes = 4[br]A = Punto(EjeX)[br]B = Punto(Semirrecta(A + (0.3, 0), A + (2, 0)))[br]n = 3[br]ang = π / partes[br]PA = Secuencia(A + t B, t, 0, n - 1)[br]PB = Secuencia(B + t B, t, 0, n - 1)[br]r: Recta((0, 0), (1; ang))[br]Ec1 = Zip((x(P1))² ≤ x² + y² ≤ (x(P2))² ∧ y > 0 ∧ PrimerMiembro(r) ≤ 0, P1, PA, P2, PB)[br]Ec2 = Zip((x(P1))² ≤ x² + y² ≤ (x(P2))² ∧ y > 0 ∧ PrimerMiembro(r) ≤ 0, P2, PA, P1, Añade((0, 0), PB))[br]Parte1 = Secuencia(Rota(Ec1, ang * 2t), t, 0, partes)[br]Parte2 = Secuencia(Rota(Ec2, ang * 2t), t, 0, partes)[br]Parte3 = Secuencia(Rota(Ec2, ang + ang * 2t), t, 0, partes)[br]Parte4 = Secuencia(Rota(Ec1, ang + ang * 2t), t, 0, partes)[br]Bordes = Zip(Circunferencia((0, 0), P), P, Encadena({PA, PB}))[br]Bordes2 = Secuencia(Rota(Segmento((0, 0), n B), ang t), t, 0, 2partes)[/code][/quote]