Resumen
Un pentagrama es una estrella de cinco picos, hecha con cinco trazos. Tiene propiedades geométricas muy interesantes.
Para construirla, aquí dibujamos una linea horizontal, y la giramos mediante la función rot2d, cuyo al código encontraras al final de esta entrada. El guión del pentagrama se basa en dibujar una linea horizontal y luego rotarla. Sin embargo, se tiene cuidado de usar adecuadamente las definiciones de operaciones de matrices para obtener los vectores rotados.
Preguntas para pensar
1) ¿En que situaciones Matlab es una herramienta cómoda y adecuada para dibujar?, ¿y en situaciones Matlab es una pesima herramienta para hacer dibujos?
2) ¿Mejorando el entorno gráfico de Matlab, hace más amigable sus funciones de dibujo?
Ejercicios
1) Dibuje una estrella de David, utilizando de base los códigos de esta entrada
2) Explique con un ejemplo la importancia de de usar x = [x x(1)]; para obtener una rotación adecuada.
3) ¿En que coordenadas el punto en que gira la linea horizontal?, ¿Cómo puede especificar otro punto como pivote de los giros?
Códigos Matlab
function [xt, yt] = rot2d(t, x, y)
% La función rot2d rota un objeto bidimensional
% que es representado por dos vectores: X y Y
% El ángulo de rotación es t, en radianes.
r = [cos(t) -sin(t); sin(t) cos(t)];
x = [x x(1)];
y = [y y(1)];
z = r*[x;y];
xt = z(1,:);
yt = z(2,:);
%guión para dibujar el pentagrama
%% Pentagrama
% Author: Vicente Torres Zuñiga
%
% Guión Matlab para graficar el símbolo de un pentagrama en el sistema
% cartesiano
% El símbolo consiste en un círculo con un pentagrama en interior -un
% estrella de cinco puntas dibujada con cinco lineas %
%
% El algoritmo se enfoca en obtener las coordenadas de dibujo:
% primero de un circulo, luego de una linea horizontal, que posteriormente
% se rota para generar cuatro lineas para completar el pentagrama
%
close all; clear; clc % limpiamos la casa
num_puntos = 250; % número de puntos
t = linspace(0, 2*pi, num_puntos); % Intervalo
noLados = 5; % Número de lados del polígono
AnguloInt = 2*pi/noLados; % Ángulo interior del polígono
%
% Variables del círculo
r = 2; % Radio
h = 0; k = 0; % Coordenadas del centro
%
% Ecuación parámetrica del círculo:
x = r*cos(t)+h; y = r*sin(t)+k;
%
%% Ecuaciones para la linea horizontal
% Longitud de la linea horizontal
lH = 2*r*sin(AnguloInt);
% Distancia de la linea horizontal al centro: (0,0)
dist_lH = r*cos(AnguloInt);
%
% Definición del intervalo de la línea horizontal
xH = linspace(-lH/2, lH/2, num_puntos);
% Definición de vectores
L = zeros(2,num_puntos);
L(1,:) = xH;
L(2,:) = -dist_lH;
%
[L0rx L0ry] = rot2d(AnguloInt*0, L(1,:), L(2,:));
[L1rx L1ry] = rot2d(AnguloInt, L(1,:), L(2,:));
[L2rx L2ry] = rot2d(AnguloInt*2, L(1,:), L(2,:));
[L3rx L3ry] = rot2d(AnguloInt*3, L(1,:), L(2,:));
[L4rx L4ry] = rot2d(AnguloInt*4, L(1,:), L(2,:));
%
% Gráficas
hold on
plot(x,y, 'r', 'LineWidth', 4) % círculo
plot(L0rx, L0ry, 'LineWidth', 4) % línea horizontal
plot(L1rx, L1ry, 'LineWidth', 4)
plot(L2rx, L2ry, 'LineWidth', 4)
plot(L3rx, L3ry, 'LineWidth', 4)
plot(L4rx, L4ry, 'LineWidth', 4)
axis square off
hold off
% fin del guión/script