Cubo en 3D girando + EFECTO Optico- Sin apis (explicacion)

Iniciado por ‭‭‭‭jackl007, 16 Noviembre 2008, 03:43 AM

0 Miembros y 2 Visitantes están viendo este tema.

‭‭‭‭jackl007

Bueno en vista a que me sorprendio la piramide giratoria que postearon unos dias atras, usando mi matematica basica que aprendi
ahora hice este cubo qe gira, tambien puse una breve explicacion; pero para que pudan entender requiere conocimientos de otro sistema de coordenadas: Coord. Polares
PD: si miran bien el cubo tiene dos sentidos de giro: de derecha a izquierda, y de izquieda a derecha;
tan solo quedense mirando el cubo buscandole forma y se podra apreciar el efecto.
Pues da la impresion de que el cubo esta por debajo de tu mirada, como tambien por encima de tu mirada
(esto fue sin querer)





Código (vb) [Seleccionar]
'#########################################
'                                               ## Teoria ##
'La idea se basa en hacer girar un cuadrado sobre su eje
'Si tenemos dos cuadrados girando a la vez, seria como tener las dos tapas (superior e inferior) del cubo
'para ello haremos uso de coordenadas Polares, para poder propiciar el giro
'Debemos saber que un punto se puede ubicar de varias formas:
'1: Conociendo la posicion en X, y en Y
'2: Conociendo el Angulo y el Radio (Coordenadas Polares), esto usaremos para ubicar cada punto

'Si un cuadrado gira sobre su eje, existe una distancia del punto al eje, esto sera nuestro RADIO;
'por lo cual cada punto en movimiento  describira una circunferencia (su trayectoria)
'o una elipse dependiendo de como se mire

'Controles: un Timer
'by Jackl007!
'#########################################
Const PI = 3.141592654

Dim Inter As Integer 'Intervalo del Angulo

Function AngRad(ByVal a As Double) As Double
'Esta funcion convierte un Angulo Decimal a un angulo en radianes,
'recordar que necesitamos hacer dicho cambio para poder trabajar con los incrementos
'ya que la funcion seno, y coseno recibe en RADIANES
AngRad = (a * PI / 180)
End Function

Private Sub Form_Load()
Inter = 0
Me.AutoRedraw = True
Me.BackColor = vbBlack
Me.Height = 6180
Me.Width = 6180
Timer.Interval = 100

Scale (-50, 50)-(50, -50) 'Mi escala, en X y en Y normal

End Sub

Private Sub Timer_Timer()
Cls 'Colocarlo y quitarlo para probar distintos efectos
'recordamos que inter es el ANGULO

'##############################
Cubo 30, 15, 0, 0, Inter   'El 30 : radio 1, 15 = radio dos, 0 =eje x, 0 = eje y
Line (0, 40)-(0, 15), vbRed
Line (0, 15)-(0, -15), vbGreen
Line (0, -15)-(0, -40), vbRed
'##############################

'Algunos ejemplos Mas...
'#########################################
'Rotar cuadrados en su mismo eje; probar ambas sentencias de este bloque a la vez
'El cero, cero: POSICION
'Rectangulo 30, 30, 0, 0, Inter
'Rectangulo 30, 30, 0, 0, Inter + 20
'Rectangulo 30, 30, 0, 0, Inter + 40
'Rectangulo 30, 30, 0, 0, Inter + 60
'Rectangulo 30, 30, 0, 0, Inter + 80
'#########################################
'#########################################
'Conociendo a un Cuadrado
'Cuadrado 25, 0, 0, 0 'el ultimo parametro es el ANGULO DE INCLINACION
'Cuadrado 25, 0, 0, 45
'Cuadrado 25, 0, 0, 70
'#########################################


Inter = Inter + 10 'Incremento del Angulo

End Sub
Sub Cubo(ByVal R1 As Double, ByVal R2 As Double, ByVal eX As Double, ByVal eY As Double, ByVal Ang As Double)
'R1 = Radio 1 (el algoritmo calcula los giros del cubo en base al radio de una circunferencia circunscrita en el cuadrado
'R2 = radio 2
'eX = Posicion en eje X
'eY = Posicion en eje x
'Ang = angulo de inclinacion, respecto a la horizontal
Dim a, i As Integer
Dim xA, xB, yA, yB As Double 'variables para guardar las posiciones temporales

a = Ang + 45 'inclinacion entre cada radio
i = a
'Cambiamos a sistema de coordenadas polares
    For i = a To a + 360 Step 90
        If i = a Then
            xA = R1 * Cos(AngRad(i)) + eX
            yA = R2 * Sin(AngRad(i)) + R1 / 2 + eY
            xB = R1 * Cos(AngRad(i)) + eX
            yB = R2 * Sin(AngRad(i)) - R1 / 2 + eY
        Else
         Line (xA, yA)-(R1 * Cos(AngRad(i)) + eX, R2 * Sin(AngRad(i)) + R1 / 2 + eY), &HE0E0E0
         Line (xB, yB)-(R1 * Cos(AngRad(i)) + eX, R2 * Sin(AngRad(i)) - R1 / 2 + eY), &HE0E0E0
         xA = R1 * Cos(AngRad(i)) + eX
         yA = R2 * Sin(AngRad(i)) + R1 / 2 + eY
         xB = R1 * Cos(AngRad(i)) + eX
         yB = R2 * Sin(AngRad(i)) - R1 / 2 + eY
         Line (xA, yA)-(xB, yB), &HE0E0E0 'Esto dibuja las lineas entre las tapas laterales
         'quitarlo y probar los efectos

        End If
   
   
Next i

End Sub
Sub Rectangulo(ByVal R1 As Double, ByVal R2 As Double, ByVal eX As Double, ByVal eY As Double, ByVal Ang As Double)

Dim a, i As Integer
a = Ang + 45
i = a
    For i = a To a + 360 Step 90
        If i = a Then
            CurrentX = R1 * Cos(AngRad(i)) + eX
            CurrentY = R2 * Sin(AngRad(i)) + eY
    Else
        Line -(R1 * Cos(AngRad(i)) + eX, R2 * Sin(AngRad(i)) + eY), &HE0E0E0
    End If
Next i

End Sub
Sub Cuadrado(ByVal R As Double, ByVal eX As Double, ByVal eY As Double, ByVal Ang As Double)

Dim a, i As Integer
a = Ang + 45
i = a
    For i = a To a + 360 Step 90
        If i = a Then
            CurrentX = R * Cos(AngRad(i)) + eX
            CurrentY = R * Sin(AngRad(i)) + eY
    Else
        Line -(R * Cos(AngRad(i)) + eX, R * Sin(AngRad(i)) + eY), &HE0E0E0
    End If
Next i

End Sub






Lo bueno de estas cosas es que aplicas la matematica qe algun dia aprendiste, y no comprendes porque la aprendiste...
aqui se ven los efectos!!
Saludos!!!!

WestOn

#1
Wenas, esta muy bueno el ejemplo, yo estoy intentando hacer uno tambien, haber si lo consigo.
Muy bien explicado... :D, un saludo ;)


PD: En la foto superior parece que gira de izquierda a derecha, pero una vez lo probe en el VB parece que gira de derecha a izquierda :P
En mi cabeza existe una barrera espacio-tiempo de 4cm³. ¿Alguien sabe como eliminarla?.
                                                                                                                                                                                                                            

nahueld

la verdad esta muy bueno, cuanto ingenio para hacer esto, cuanta gente que sabe aplicar sus conocimientos, me gusta esto, quiero ser asì! :-\

un saludo para vos!

‭‭‭‭jackl007

#3
Gracias, gracias, en cuanto me libere de mis examenes, quisas me anime a escribir un paper para mostrar desde cero, la matematica aplicada para figuras, pero aun tendre que poder hacer mas ejemplos, estudiar un poco mas esta matematica para hacer mas cosas....

mira aqui les dejo las imagenes, donse he pintado las paredes del cubo, dependiendo de tu cual veas, es el giro del cubo; vuelvelo a mirar (el con movimiento), y ahora busca las paredes y la base o la parte superior... y alli se podra apreciar los giros...




Sin querer me di cuenta de eso.... cuando ya estaba todo hecho... :)

Saludos :P

jack06

ah todo lo que puede hacer las matematicas esta muy bueno y muy bien explicado que envidia la verdad yo en las mates no doy mucho jojo  :P Salu2
(̅_̅̅_̅(̅_̅_̅_̅_̅() ڪ €l $åßîø nø d nµn¢å tødø lø qµ£ Þî£n$å, Þ£®ø $î£mÞ®£ Þî£n$å tødø lø qµ£ d (̅_̅̅_̅(̅_̅_̅_̅_̅() ڪ

Dessa

#5
Muy bueno jackl007  , gracias por el aporte.

PD: apareció AngRad
Adrian Desanti

‭‭‭‭jackl007

Gracias
Cita de: Dessa link=topic=235246.msg1123326#msg1123326 date=1226849268
PD: apareció
b]AngRad[/b], 
que quisiste decir con que aparecio?, osea esa es la funcion que convierte los grados normales a radianes...
no comprendo a que te refieres con que aparecio?
(en un principio cuando postee el codigo, me habia olvidado de poner esa funcion, asi que modifiqe el post colocandola...
nose si lo dices por eso...)

Dessa

#7
Es que bajé el el code a penas lo publicaste y me faltaba esa función,  un aspecto sin importancia, te felicito nuevamente, saludos.

Adrian Desanti

<[(x)]>

mmm

me suena, pero si el code es tullo. Lo que si espero, que la idea tambien.

esta bueno me gusto lo de "paraqueladogira?"

y nose si soy yo o que pero me parece que el cubo presenta una pequeña deformacion mietras gira.

me despido.-00010000
<[(x)]>

‭‭‭‭jackl007

Exacto, el code es enteriito mio, Todo lo escribi, no vi ningun ejemplo de esto (mire superficialmente el tuyo, pero no me dedicar a entender el razonamiento), solo aplique conocimientos que se adquiri en el primer semeestre de mi facultad.
lo de la deformacion es verdad, despues de mis examenes hare un estudio minucioso de las deformacionmes que presenta un verdadero cubo al girar con respecto a dos angulos. ya que se puede conocer la posicion en el espacio conociendo dos angulos y un radio... en DIC me pongo con esto cuando me libere un poco de mis estudios...

Pues ese "cubo" es una idea de hacer girar dos cuadrados en paralelo y unir los vertices de cada cuadrado.
Realmente es un cuadrado que gira sobre su eje, pero en este caso hay dos; Solo que un lado es mas largo que el otro para dar la apariencia de estar en 3D

Saludos :P