Bien, tuve que agregar algo pero logré que funcionara gracias a ti:
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;
PosicionBase = -16.5*(Hijos-1);
do {
Hijo = Hijo+1;
Posicion = PosicionBase+(Hijo-1)*33;
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 );
}
}
A ver si lo entendí y lo puedo simplificar, porque hay mucho -1 por ahí.
Primero se calcula la posición mínima:
PosicionBase = -16.5*(Hijos-1);
Eso te lo copié.
Luego se calcula la posición de cada objeto, usando el cálculo anterior:
Posicion = PosicionBase+(Hijo-1)*33;
Puse ese -1 porque tu código me daba 16.5 y 49.5, entonces supuse que era porque N lo definiste como 0, pero yo Hijo lo defino como 1. No sé si es eso pero me funcionó.
Esto es basicamente Z = -16.5*(X-1)+(Y-1)*33
¿no?
Z es la posición.
X es la cantidad de objetos.
Y es el objeto al cual se le asigna la posición.
¿O puede simplificarse? No me doy cuenta cómo.
Ahora veo, me parece, que es imposible. Lo que se podría hacer es:
-16.5*X+16.5+Y*33-33
¿no? Pero no sé si es más simple, intuía que sí porque no tiene paréntesis, pero supongo que da igual, es incluso una fórmula más larga.
Bueno, solucionado.