Herramientas de usuario

Herramientas del sitio


numbers:graphics

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
numbers:graphics [2011/02/18 12:05]
alfred
numbers:graphics [2020/05/09 09:25] (actual)
Línea 2: Línea 2:
  
 ===== Geometría ===== ===== Geometría =====
 +
 +
  
  
Línea 40: Línea 42:
   }   }
 </​code>​ </​code>​
-  * **Distancia entre un punto y una línea**+  * **Distancia entre un punto y una línea**, el siguiente código devuelve la distancia entre un punto P a la lína que pasa entre A y B:
 <code java> <code java>
 +public double pointToLineDistance(Point A, Point B, Point P) 
 +
 + ​double normalLength = Math.sqrt((B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y)); 
 + ​return Math.abs((P.x - A.x) * (B.y - A.y) - (P.y - A.y) * (B.x - A.x)) / normalLength;​ 
 +}
 </​code>​ </​code>​
 **Saber si dos líneas son paralelas** ​ **Saber si dos líneas son paralelas** ​
Línea 52: Línea 58:
  
 ===== Transformaciones ===== ===== Transformaciones =====
 +
 ==== Traslación ==== ==== Traslación ====
 +{{numbers:​graf:​translacion.png?​300|}}
 +=== Por suma ===
 +Trasladaremos la posición (20, 30) unas (50, -100) posiciones: \\ 
 +{{numbers:​graf:​translacion_por_suma.png|}}
 +=== Por multiplicación ===
 +Trasladaremos la posición (20, 30) unas (50, -100) veces: \\ 
 +{{numbers:​graf:​translacion_por_multiplicacion.png|}}
 +
 +
 +
 +
 +
 ==== Rotación ==== ==== Rotación ====
 +=== Rotación 2d ===
 +La multiplicación de un vector 2d por la siguiente ​ matriz: \\ 
 +<m>
 +delim{[} { matrix{2}{2}{{cos(alpha)} {-sen(alpha)} {sen(alpha)} {cos(alpha)} }  } {]}
 +</m> \\ 
 +devolverá otro vector 2d que será el equivalente al primero pero rotado //alpha// radianes.
 +=== Rotación 3d (X, Y, Z) ===
 +Se utilizarán vectores de 3 dimensiones (o de cuatro con el último término a 0). \\
 +:?: No tengo claro cual es cual: \\ 
 +<m>
 +delim{[} { matrix{4}{4}{ 1 0 0 0 0 {cos(alpha)} {-sen(alpha)} 0 0 {sen(alpha)} {cos(alpha)} 0 0 0 0 1 }  } {]}
 +</m> \\ 
 +<m>
 +delim{[} { matrix{4}{4}{ {cos(alpha)} 0 {sen(alpha)} 0 0 1 0 0 {-sen(alpha)} 0 {cos(alpha)} 0 0 0 0 1 }  } {]}
 +</m> \\ 
 +<m>
 +delim{[} { matrix{4}{4}{ {cos(alpha)} {-sen(alpha)} 0 0 {sen(alpha)} {cos(alpha)} 0 0 0 0 0 1 }  } {]}
 +</m>
 +
 ==== Escalado ==== ==== Escalado ====
  
Línea 245: Línea 283:
   * [[http://​freespace.virgin.net/​hugo.elias/​models/​m_perlin.htm]]   * [[http://​freespace.virgin.net/​hugo.elias/​models/​m_perlin.htm]]
   * [[http://​devmag.org.za/​articles/​48-HOW-TO-USE-PERLIN-NOISE-IN-YOUR-GAMES/​2/#​top1]]   * [[http://​devmag.org.za/​articles/​48-HOW-TO-USE-PERLIN-NOISE-IN-YOUR-GAMES/​2/#​top1]]
 +
 +===== Ecuaciones de formas =====
 +==== Elipse ====
 +<code python>
 +import pygame
 +from pygame.locals import *
 +import sys
 +import math
 +w = 640
 +h = 489
 +screen = pygame.display.set_mode((w,​h))
 +
 +sampling = 50
 +r1 = 100
 +r2 = 160
 +
 +def drawPoint (x,y, c=(255,​0,​0)):​
 + centX = w/2
 + centY = h/2
 + nx = centX + x
 + ny = centY + y
 + pygame.draw.circle(screen,​ c, (int(nx), int(ny)), 1)
 +
 +for i in range(sampling):​
 + theta = i * (2. * 3.1421)/​sampling
 + cosTheta = math.cos(theta)
 + sinTheta = math.sin(theta)
 + tmp1 = (cosTheta*cosTheta)/​(r2*r2)
 + tmp2 = (sinTheta * sinTheta)/​(r1*r1)
 + tmp = math.sqrt(tmp1+tmp2)
 + drawPoint(cosTheta/​tmp,​ sinTheta/​tmp)
 +
 +pygame.display.flip()
 + 
 +while True:
 +    for event in pygame.event.get():​
 +        if event.type == QUIT:
 +            sys.exit()
 +    pygame.display.update()
 +</​code>​
numbers/graphics.1298030759.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)