java - titledborder - Formas concéntricas suavemente sombreadas impulsadas por ecuaciones
titledborder java (2)
Prueba esto en R:
# create palette
greyScale <- colorRampPalette(c("black","white"))
# function to draw shape
plotHeart <- function(r, col){
t <- seq(0,2*pi,length.out=100)
x <- r*sin(t)^3
y <- (13*r/16)*cos(t) - (5*r/16)*cos(2*t) - (2*r/16)*cos(3*t) - (r/16)*cos(4*t)
polygon(x,y,col=col,border=NA)
}
# create new plot canvas
plot.new()
# limits are approximate here
plot.window(xlim=c(-16,16),ylim=c(-16,13))
# use mapply to loop
mapply(plotHeart,seq(16,0,length.out=100),greyScale(100))
Lo que resulta en:
Esto funciona mediante el dibujo repetido de polígonos rellenos de tamaño decreciente y colores diferentes uno encima del otro. Para responder tu pregunta:
(1) Esto fue producido por mi máquina (una computadora portátil modesta Core 2 duo) en 0.09 segundos. Pueden ser otros lenguajes / implementaciones que son más rápidos, pero esto me parece lo suficientemente rápido.
(2) Una forma plana formada por líneas que no se cruzan con otras generalmente se llama un polígono simple.
Fondo
Buscando crear transiciones de video interesantes (en escala de grises).
Problema
Dadas las equations que representan una forma cerrada y simétrica, trace el contorno y sombree concéntricamente la forma hacia su centro.
Ejemplo
Considera las siguientes ecuaciones:
x = 16 * sin(t)^3
y = 13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t)
t = [0:2 * pi]
Cuando se grafica:
Cuando está sombreado, se asemejaría (no se muestra completamente sombreado, pero es suficiente para mostrar la idea):
Observe que el sombreado es más oscuro en el exterior (por ejemplo, # 000000 RGB hexadecimal), luego se aclara a medida que se llena hacia el centro. El centro sería un punto blanco (por ejemplo, #FFFFFF).
Preguntas
- ¿Cuál sería la forma más conveniente de producir imágenes en escala de grises de alta resolución y con sombra concéntrica, como el corazón sombreado de arriba?
- ¿Cómo se llaman formalmente tales formas simétricas y cerradas?
¡Gracias!
Ideas
- Utilice una biblioteca como http://code.google.com/p/jmathplot/
- Utilice GNUPlot
- Utilizar R
- Trazar utilizando Wolfram Alpha, use ImageMagick para crear versiones concéntricas más pequeñas
Usando Gráficos 2D , este example altera la transparencia de los círculos concéntricos usando drawOval()
para lograr un efecto similar, pero el enfoque se puede extender para draw()
cualquier clase que implemente la interfaz Shape
. El método AffineTransform
createTransformedShape()
de AffineTransform
se puede usar para traducir y escalar el contorno de forma concéntrica.