Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/03/2014, 00:23
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 5 meses
Puntos: 38
Respuesta: estructuras en c++

1º pues perímetro es el área externa de una figura.
Eso se usa mucho en gráficas, lo uso para crear jueguitos :D
Imagínese la pantalla de tu ordenador...
Están los pixeles ¿verdad? un pixel es como una bombilla, y una pantalla tiene una cierta cantidad de esas bombillas.
Esa cantidad de bombillas suele ser la resolución de la pantalla. A mas resolución mas pixeles tiene.
Ahora bien ¿¿¿Cuantos pixeles tiene??? Esa pregunta depende del monitor.
nosotros lejos de entrar en tecnicismo imaginamos que nuestra pantalla tiene los suficientes para mostrar dicha imagen.
Digamos que tenemos 800 pixeles de largo y 600 de alto.
El sistema de cordenadas puede variar pero yo digo que x es ancho y y es alto ¿ok?
o sea que
const int x = 800;
const int y = 600;
const por que no van a cambiar.
Esos 2 parametros son lo que deberia ir en la clase punto junto con sus metodos de acceso(geters y seters).

Ahora calcular la distancia entre 2 puntos has dicho que sabes XDD asi que saltamos a la 3ª clase.
Cada tipo de "FIGURA GEOMETRICA" tiene un calculo. No es lo mismo calcular un circulo que un cuadrado, ni mucho menos un triangulo ¿ok?
Usaremos un cuadrado ;)
Imagina que un cuadrado tiene 4 puntos. uno en cada esquina de los cuadrados.

pues bien...
si son 4 puntos deberias tener 4 puntos ¿no?

Punto esquina_superior_izquierda;
Punto esquina_superior_derecha;
Punto esquina_inferior_izquierda;
Punto esquina_inferior_derecha;

una funcion que tome los valores X Y de cada punto.
funcion( Punto esquina_superior_izquierda, Punto esquina_superior_derecha, Punto esquina_inferior_izquierda, Punto esquina_inferior_derecha )

Ahora bien que los meta esos puntos en un arreglo ;)
Punto cuadrado[4];
cuadrado[0] = esquina_superior_izquierda;
cuadrado[1] = esquina_superior_derecha;
cuadrado[2] = esquina_inferior_izquierda;
cuadrado[3] = esquina_inferior_derecha;

creo que ya vas pillando no XDD
ahora bien...¿Como vamos calcular eso?
Se supone que lo hace la clase que calcula no?
O lo hacer con herencia o le pasas ese arreglo...Te lo dejo a ti eso.

La cosa es¿Como se calcula el perímetro de un cuadrado?
pues el perimetro del cuadrado si es una "CUADRADO" pues es que sus lados son todos iguales ¿no? :D
Pues es solo pasarla uno de los lados cualquiera y que te devuelva eso multiplicado por 4 XDDD

Debes de pensar cuantas figuras quieres calcular triángulos, círculos, cuadrado rectángulo.

Por ejemplo el cuadrado_rectángulo no es exacto todos sus lados y tendrás que calcular algunos lados por separado.
el circulo pues debes multiplicar el radio *2, y después por PI o yo que se...Las mates las tengo oxidadas XDD
Para calcular el perímetro eso busca las formulas por Internet.


Bien ahora echemos una mirada en eso de las coordenadas.

Debes tener claro como funciona las coordenadas. Donde esta el punto 0 en una gráfica.

Yo dire que esta en la esquina superior izquierda pero eso depende mucho por que puede estar en el centro:


Nosotros usaremos este:

O sea la X va de la derecha a la izquierda y la y va de arriba hacia abajo.
Imagine que son las partes de la izquierda de tu pantalla y la parte superior.
El cero esta arriba a la izquierda.

Imagine que te paso 4 puntos a,b, c y d:
La gráfica seria mas o menos asi:
Miramos la coordenada de esta forma (X, Y) si pongo (0, 800) es x=0; y =800;


Es solo hacer la función que calcule según la figura geométrica.


Las formulas si no las sabes busca en google.
calcular perímetro cuadrado
calcular perímetro circulo
calcular perímetro triangulo....

Si necesitas mas ayuda pues aquí estamos.

Te explique como hacer en pixeles pero eso todo se puede aplicar a centímetros o metros o kilómetros XDDD

para los trialgulos la cosa ya es mas chunga. debes saber calcular la distancia entre 2 puntos

entonces digamos que tienes 3 puntos ¿No? XDD
A,B y C

pues calculas primero de A a B, de B a C y de Ca A.

Después suma los 3.
En google esta.
En videos y todo si no entiendes :D
lo de los cuadrados tambien se calcula por puntos.

si no me equivoco se calcula con la raiz cuadrada.
hay una funcion llamada sqrt() que te la calcula.

Código C++:
Ver original
  1. //incluir cmath, recibe 2 objetos del tipo punto
  2. int pointimetroXD(Punto distancia, Punto diferencia  ){
  3.     //pueden ser float si no anda con int.
  4.     int distanciax = diferencia.x - distancia.x;
  5.     int distanciay = diferencia.y - distancia.y;
  6.     int distancia = sqrt(distanciax * distanciax + distanciay * distanciay);
  7.    
  8.     return distancia;
  9. }

Creo que eso te calcula la distancia :D

Bueno me piro que ya casque demasiado. Solo espero que te haya servido. ;)

Puedes usar esa función para calcular directamente todos los puntos si así ves mejor XDDD

Así se puede hacer

para calcular cuadrados y rectángulos, ya sean de cualquier forma.
CA, CD, AB, DB


para que entiendas en la foto tienes la x que aumenta asi para la derecha.

|------diferenciax-------|-----------------distanciax-------------------|
x=0 C.x=100 D.x =200


como la x aumenta hacia ===>
restas la x menor del cuadrado de la x mayor:
D.x - C.x
Eso elimina la distancia que hay del borde de la pantalla izquierda hacia al punto C.X
dejando solo el tamaño del cuadrado exacto entre C.x y D.x
O sea: que ese seria pasar a la función primero el 200 después el 100 de forma que quede:
pointimeterXD(D.x, C.x);
Una vez calculado eso tendrías la parte inferior del cuadrado.

int inferior = pointimeterXD(D.x, C.x);
cuando tengas las 4 lo sumas ^^

si haces el contrario estarías restando un numero mas grande el mas pequeño y te devolvería -100 cosa que no es correcta.
Fíate muy bien en el sistema de coordenadas por que según sea el sistema todo cambia.
Imagina como calcular un punto C.X que guardara un numero negativo por ejemplo
un C.x = -20
y el D.x estuviera en D.x = 100;
El punto cero estaría en el centro de la pantalla.
Así suele ser las coordenadas en 3D -_-'
En la 2D solo trabajamos en una parte de la reja prescindiendo de las otras pero no es por que la coordenada 0 este en la esquina superior izquierda que no aya números negativos. ;)

Si la coordenada es igual que la mía pues le pasas el numero x mas grande primero después el mas pequeño a la función.
Bueno sera siempre así, el mas grande y después el mas pequeño aun que tenga la otra coordenada. ;)

Lo mismo con la y, primero la mas grande y después restamos la distancia del borde hacia la y mas pequeña. del cuadrado.


Intenta implementar el código.
Después si tienes problemas pon aquí y te intento ayudar o alguien con mas luces que yo XDDD

Casco mucho por que quiero que aprendas, no que copies y ya esta XDD
Pero si quieres solo copiar dale, pero recuerda que mañana ya sabes que pasa a la hora de hacer un examen

Algunas imagenes de interes:
Sistema 3D frente al 3D:


Haciendo juegos 2D XDD:


Mire los modos de coordenadas 2D, observe donde están los puntos 0 en tu pantalla y hacia adonde aumenta las Xs y las Ys:


Aumentan siempre hacia donde apunta: 0-+-+-+->
El cero esta donde cruzan las 2 lineas, y puede haber números negativos.
Pero si trabajamos del lado positivo solamente es mas fácil ¿No?
Para eso sirve la clase Punto para expresar esos puntos y calcular distancias por ejemplo entre imágenes i calcular también colisiones entre personajes.
Si por ejemplo un proyectil a tocado nuestro personaje XDD

Última edición por vangodp; 27/03/2014 a las 00:42