Autor
|
Tema: Rotar bien unas flechas, posible problema de Matemática. (Leído 2,869 veces)
|
Tachikomaia
Desconectado
Mensajes: 1.390
Hackentifiko!
|
Intento que un programa genere un grafo de modo que las ramificaciones (hijos), si son más de una, vayan para los costados. Los números 10 y 9, es decir los hijos del 11, están bien colocados y él también. Lo que pido ayuda para arreglar son las flechas, pues me ayudaron antes unos matemáticos pero sigo sin tener mucha idea de cómo se hace, y ahora no sé si es mala programación, o mala Matemática, o todo mal Ambas flechas deben salir del 11 pero una debe apuntar al 10 y la otra al 9. Hago esto: function InsertarNodo () { Imagenes = Imagenes+1; Nodos = Nodos+1; Grafo.attachMovie("mNodo", "Nodo"+Nodos, Imagenes); // Especificar la situación que representa: set ("Grafo.Nodo"+Nodos+".EnHP", EnHP); // Insertar flecha: Imagenes = Imagenes+1; Grafo.attachMovie("mFlecha", "Flecha"+Nodos, Imagenes); // Especificar el sitio donde se insertan: setProperty ("Grafo.Nodo"+Nodos, _y, PosicionY+33); setProperty ("Grafo.Flecha"+Nodos, _x, PosicionX); setProperty ("Grafo.Flecha"+Nodos, _y, PosicionY+6.5); Hijos = Hijos+1; if ( Hijos == 1 ) { setProperty ("Grafo.Nodo"+Nodos, _x, PosicionX); } else { Hijo = 0; Resta = 49.5*(Hijos-1); do { Hijo = Hijo+1; Posicion = Hijo*33-Resta; setProperty ("Grafo.Nodo"+(Nodos-Hijos+Hijo), _x, Posicion); // Rotación y tamaño de flecha. DistanciaXPadreHijo = Math.abs(Posicion); setProperty ("Grafo.Flecha"+Nodos, _height, Math.sqrt(Math.pow(DistanciaXPadreHijo, 2)+20*20)); setProperty ("Grafo.Flecha"+Nodos, _rotation, 180/Math.PI*Math.atan (DistanciaXPadreHijo/20)*-1); } while ( Hijo < Hijos ); } }
Lo que debe arreglarse, supongo debe de ser algo de esto: DistanciaXPadreHijo = Math.abs(Posicion); setProperty ("Grafo.Flecha"+Nodos, _height, Math.sqrt(Math.pow(DistanciaXPadreHijo, 2)+20*20)); setProperty ("Grafo.Flecha"+Nodos, _rotation, 180/Math.PI*Math.atan (DistanciaXPadreHijo/20)*-1); La distancia creo que la calculo bien porque el padre está en 0 y el hijo está a la izquierda (número negativo) o derecha, entonces es ese mismo número convertido al positivo. La altura o largo ahora que lo veo mejor se hace con la hipotenusa. 20 es el largo de la flecha. Y la rotación no sé, no lo modifiqué. ¿Qué está mal?
|
|
« Última modificación: 15 Diciembre 2023, 02:43 am por Tachikomaia »
|
En línea
|
|
|
|
EdePC
|
Requieres de cálculos complejos para hacerlo en bruto, pero como tienes Flash puedes crear los objetos de tal manera que los puedas aprovechar a tu favor, me refiero a los Puntos de Registro, dicho punto es el que toma Flash como referencia para hacer las transformaciones y locaciones. Puedes crear tu Flecha de tal manera que el Punto de Registro esté justo arriba para que sirva como eje para las rotaciones De igual manera con tus números para que sirva de punto de locación para la futura Flecha haciendo que coincidan ambos puntos De forma predeterminada el Punto de Registro se sitúa siempre en la mitad del Clip, si lo quieres usar así también se puede pero debes tenerlo en cuenta la hacer los cálculos y el eje quede donde debe Por ejemplo si he creado mis Clips haciendo que los Puntos de Registro queden donde quiero tal cual muestra las primeras imágenes que puse antes, al ejecutar: x = getProperty(_root.numero, _x); y = getProperty(_root.numero, _y); _root.attachMovie("flecha", "flecha1", 0); setProperty (_root.flecha1, _x, x); setProperty (_root.flecha1, _y, y); setProperty (_root.flecha1, _rotation, 45); _root.attachMovie("flecha", "flecha2", 1); setProperty (_root.flecha2, _x, x); setProperty (_root.flecha2, _y, y); setProperty (_root.flecha2, _rotation, -45);
Obtengo: La locación y rotación es mucho más simple porque solo debo obtener las coordenadas del Punto de Registro del número y hacerlas coincidir con las de la Flecha, luego la rotación igualmente toma como referencia el Punto de Registro y me basta con moverlo 45 grados para que mire a la izquierda y -45 para que mire a la derecha
|
|
|
En línea
|
|
|
|
Tachikomaia
Desconectado
Mensajes: 1.390
Hackentifiko!
|
La flecha ya la tenía como indicaste, los números no me parece necesario... Te paso el fla y el swf: https://docs.google.com/document/d/1jLMtAvj-0wyl9DTUnHwF1MNjqryWMzqY/edit?usp=sharing&ouid=109273743447273895658&rtpof=true&sd=truehttps://drive.google.com/file/d/1wiTv5tFwbS3lG3cj0r5vYOByGmpEaJcx/view?usp=sharingEdit, creo que ya lo solucioné: function InsertarNodo () { Imagenes = Imagenes+1; Nodos = Nodos+1; Grafo.attachMovie("mNodo", "Nodo"+Nodos, Imagenes); // Especificar la situación que representa: set ("Grafo.Nodo"+Nodos+".EnHP", EnHP); // Insertar flecha: Imagenes = Imagenes+1; Grafo.attachMovie("mFlecha", "Flecha"+Nodos, Imagenes); // Especificar el sitio donde se insertan: setProperty ("Grafo.Nodo"+Nodos, _y, PosicionY+33); setProperty ("Grafo.Flecha"+Nodos, _x, PosicionX); setProperty ("Grafo.Flecha"+Nodos, _y, PosicionY+6.5); Hijos = Hijos+1; if ( Hijos == 1 ) { setProperty ("Grafo.Nodo"+Nodos, _x, PosicionX); } else { Hijo = 0; Resta = 49.5*(Hijos-1); do { Hijo = Hijo+1; Posicion = Hijo*33-Resta; setProperty ("Grafo.Nodo"+(Nodos-Hijos+Hijo), _x, Posicion); // Rotación y tamaño de flecha. DistanciaXPadreHijo = Math.abs(Posicion); setProperty ("Grafo.Flecha"+(Nodos-Hijos+Hijo), _height, Math.sqrt(Math.pow(DistanciaXPadreHijo, 2)+20*20)); Rotacion = 180/Math.PI*Math.atan (DistanciaXPadreHijo/20*-1); if ( Posicion<0 ) { Rotacion = Rotacion*-1; } setProperty ("Grafo.Flecha"+(Nodos-Hijos+Hijo), _rotation, Rotacion); } while ( Hijo < Hijos ); } }
Cambié 2 cosas. Primero, las referencias a las flechas estaban mal. Yo ponía "Grafo.Flecha"+Nodos, pero Nodos no cambia en el do while, así que sólo rotaba una flecha. Lo cambié a ("Grafo.Flecha"+(Nodos-Hijos+Hijo). Hijo sí cambia. Esa fórmula ya no recuerdo por qué es así, lo anoté en un diario, no voy a revisar, la cosa es que funciona. También agregué un if para que si la flecha debe rotarse a la izquierda se multiplica la rotación por -1. No marco el tema como solucionado porque lo pensé para casos en que hubiera muchos hijos pero por ahora sólo hay 2, así que no sé si funciona bien cuando hay más. La X que ves en los archivos, si los viste, es para asegurarme de que el 11 se coloque en medio de la pantalla, porque a veces erraba en eso.
|
|
« Última modificación: 16 Diciembre 2023, 09:48 am por Tachikomaia »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Es posible rotar un control u objeto?? en VB6, mediante la API o usando Asm?
« 1 2 »
Programación Visual Basic
|
EddyW
|
15
|
11,813
|
22 Marzo 2010, 07:39 am
por EddyW
|
|
|
Unas Veces Lo Hace Bien Otras No :S (Plis Urgente)
Programación C/C++
|
Gerik
|
1
|
2,084
|
14 Septiembre 2010, 01:13 am
por Beakman
|
|
|
Se filtran unas imágenes de un posible tablet de Nokia
Noticias
|
wolfbcn
|
0
|
2,376
|
8 Abril 2013, 02:29 am
por wolfbcn
|
|
|
otro problema de matematica ... ayuda plis xD
Dudas Generales
|
gabrielprocs
|
4
|
2,554
|
19 Septiembre 2014, 02:21 am
por simorg
|
|
|
Así me timaron en Facebook: compré unas deportivas de 110€ y recibí unas gafas..
Noticias
|
wolfbcn
|
1
|
2,998
|
21 Diciembre 2017, 04:49 am
por Serapis
|
|