Coordenadas muy complicadasHola a todos.
Tengo una pregunta muy complicada para explicar aquí. Así que básicamente, esta es la tabla de datos:

Se supone que debo crear una columna llamada "Total de coordenadas a tu alrededor" utilizando el script JSL, imaginando que hay 8 cuadrados alrededor de la coordenada particular (excluyendo su propia coordenada básicamente), como se muestra en la siguiente imagen, donde el pequeño círculo azul representa esta coordenada particular Por lo tanto, el máximo de "Total de coordenadas a tu alrededor" es 8. Por ejemplo, como se muestra en la imagen de arriba, en el número 9998887, la coordenada (-2,1) tiene un "Total de coordenadas a su alrededor" de 3, que son (-2,2), (-1,1) y (-1,0). Solo para una nota, el eje horizontal representa el cambio en la coordenada x, e igualmente, el eje vertical representa el cambio en la coordenada x. De la tabla de datos anterior, es fácil hacer 20 "Total de coordenadas a tu alrededor", pero en mis tareas reales, hay cerca de 23,000 filas para tratar. Además, una cosa más, se supone que debo ordenar los números de acuerdo, como 9465371 y 9998887 que se muestran en la tabla de datos anterior, respectivamente (obtuvieron las mismas coordenadas), antes de trabajar en el "Total de coordenadas a tu alrededor".

dt = current data table();
dt << New column ("Total Coordinates Around You",
numeric,
continuous,
formula (
For ( i = 1, i<= N Row(), i++,
(:Total Coordinates Around You = 0; munipulated_x = :X-Coordinate - 1; munipulated_y = Y-Coordinate - 1; j = 1; k = 1; formula (
For ( j = 1, j <= 3, j++,
(formula(
For ( k = 1, k <= 3, k++,
(formula( If (munipulated_x == :X-Coordinate & munipulated_y == :Y-Coordinate, :Total Coordinates Around You))
; munipulated_y ++)
)
) ; munipulated_x ++)
)
) ; :Total Coordinates Around You --)
)
)
);Arriba hay un script que creé, del cual no estoy seguro de por qué esto no se puede trabajar, usando bucles. ¿Alguien me puede iluminar sobre los pasos y soluciones sobre cómo lidiar con este problema? Hay una segunda parte de esta pregunta, que intentaré una vez que termine mi primera parte. Permítame explicar si hay alguna duda, especialmente sobre la claridad de la pregunta y la explicación, y una vez más, perdóneme por la explicación. Gracias.
Re: Coordenadas muy complicadasNo lo haría en una fórmula porque se ejecuta para cada fila, por lo que hacer un bucle dentro de una fórmula hará que seas bastante lento.
Probablemente esta no sea la mejor manera pero parece funcionar. ¿Suponiendo que entiendo correctamente y que estás tratando de encontrar cuántas fichas están tocando tu ficha de inicio?
Déjame saber si esto es lo que estás tratando de hacer.
Names default to here(1);
dt = New Table( "Example",
Add Rows( 20 ),
New Column( "Number",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[9465371, 9465371, 9465371, 9465371, 9465371, 9465371, 9465371, 9465371,
9465371, 9465371, 9998887, 9998887, 9998887, 9998887, 9998887, 9998887,
9998887, 9998887, 9998887, 9998887]
)
),
New Column( "X-Coordinate",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[2, 2, 1, 1, 0, 0, -1, -1, -2, -2, 2, 2, 1, 1, 0, 0, -1, -1, -2, -2]
)
),
New Column( "Y-Coordinate",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Selected,
Set Values( [2, 1, 0, -1, 3, 2, 1, 0, 2, 1, 2, 1, 0, -1, 3, 2, 1, 0, 2, 1] )
),
New Column("Adjacent", Numeric, "Continuous")
);
summarize(dt, byn = By(:Number));
for(i=1, i<=nitems(byn), i++,
sel = byn[i];
rows = dt << Get Rows Where(:Number == num(sel));
mat = dt[rows, {"X-Coordinate", "Y-Coordinate"}];
for(k = 1, k<=nrows(rows), k++,
row = rows[k];
// do a check that you're within the limit
adj = sqrt( (mat[k, 1] - mat[0, 1])^2 + (mat[k, 2] - mat[0, 2])^2) <= sqrt(2);
Column(dt, "Adjacent")[row] = nrows(Loc(adj)) - 1;
)
);Re: Coordenadas muy complicadasHola @vince_faller ,
Gracias por tu ayuda. En realidad, estoy tratando de ver si las coordenadas correspondientes de DieX y DieY existen, como lo que se dice, mosaicos que tocan el mosaico inicial, y así sucesivamente, durante 20 filas, así que no estoy seguro de cómo crear Una fórmula sin tener que usar el bucle como lo que has mencionado. Además, la fórmula de tu segunda parte:
Suma(
Sqrt (
(: Nombre ("X-Coordenadas") - mat [0, 1]) ^ 2 + (: Nombre ("Y-Coordenadas") - mat [0,
2]) ^ 2
) <= Sqrt (2)
) - 1;
Solo toma en cuenta la matriz [0,0], ¿tengo derecho a decir eso? Gracias.Re: Coordenadas muy complicadas¿Puedes describir lo que realmente estás tratando de hacer en lugar de eso?
Y no, eso no es solo para colchoneta [0,0].Re: Coordenadas muy complicadas¿Es el problema que no cree que se pueda usar un bucle For () en una fórmula? Ciertamente puede ser utilizado en una fórmulaRe: Coordenadas muy complicadasHola @vince_faller ,
Lo siento, creo que lo estoy logrando, pero ¿puedo entender lo que esta línea es tuya ?: adj = sqrt ((mat [k, 1] - mat [0, 1]) ^ 2 + (mat [k , 2] - mat [0, 2]) ^ 2) <= sqrt (2); ¿media? Gracias.Re: Coordenadas muy complicadasNo estoy seguro de entender el requisito, pero si desea encontrar puntos cercanos a un punto determinado, también podría considerar el uso de 'KDTable ()'. Por ejemplo:
Names Default To Here( 1 );
n = 100; // Size of square
// Make a table of x and y locations
dtx = AsTable((1::n)`, << Invisible);
dty = AsTable((1::n)`, << Invisible);
dt = dty << Join( With( dtx ), Cartesian Join );
Close(dtx, NoSave);
Close(dty, NoSave);
Column(dt, 1) << setName("x");
Column(dt, 2) << setName("y");
dt << deleteProperty("Source");
dt << setName("xy Locations");
// Put thes locations into a matrix
mat = dt << getAsMatrix;
tbl = KDTable( mat );
// Pick a point in the interior, so we don't need to decide on any boundary conditions
myX = RandomInteger(2, n-1);
myY = RandomInteger(2, n-1);
myRow = Loc(mat[0, 1] == myX & mat[0, 2] == myY);
myRow = myRow[1];
// Find the 8 nearest neighbours to the chosen point
{rows, dist} = tbl << K nearest rows( 8, myRow );
Show( myRow, rows );
// Check it worked
myXvals = Column(dt, "x")[myRow];
myYvals = Column(dt, "y")[myRow];
dt << NewColumn("Distance", Numeric, Continuous, Formula(sqrt((:x - myXvals)^2 +(:y - myYvals)^2)));
dt << selectRows(VConcat(myRow, rows`));
gb = dt << Graph Builder(
Size( 529, 453 ),
Show Control Panel( 0 ),
Variables( X( :x ), Y( :y ), Color( :Distance ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
);
Re: Coordenadas muy complicadasHola a todos @vince_faller , @txnelson y @ian_jmp , Ya tengo el requisito de la pregunta, disculpe la pregunta confusa y la confusión, ¡gracias!