Salut tout le monde,
J'ai 30 points discrets en X, Y, Z définissant le plan 1, et 30 autres points en X, Y, Z définissant le plan 2. Je dois calculer l'angle entre les plans 1 et 2. ChatGPT fournit le script JSL suivant, mais il est bloqué à la ligne 33. Pourriez-vous m'aider à vérifier les deux pièces jointes (*.jmp et *.jsl) pour exécuter ce script ? Merci beaucoup.
// Use current data table
dt = Current Data Table();
// Subset for Plane1 and Plane2
dt1 = dt << Subset( Where( :Plane == "Plane1" ), Output Table Name( "Plane1" ) );
dt2 = dt << Subset( Where( :Plane == "Plane2" ), Output Table Name( "Plane2" ) );
// Fit plane 1: z = a1*x + b1*y + c1
b1 = dt1 << Fit Model(
Y( :Z ),
Effects( :X, :Y ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run( "Fit Model" )
);
coeff1 = b1 << Get Estimates;
a1 = coeff1["X"];
b1_ = coeff1["Y"];
// Fit plane 2: z = a2*x + b2*y + c2
b2 = dt2 << Fit Model(
Y( :Z ),
Effects( :X, :Y ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run( "Fit Model" )
);
coeff2 = b2 << Get Estimates;
a2 = coeff2["X"];
b2_ = coeff2["Y"];
// Normal vectors: [a, b, -1]
n1 = [a1, b1_, -1];
n2 = [a2, b2_, -1];
// Compute dot product and magnitudes
dotProd = Sum( n1 * n2 );
mag1 = Sqrt( Sum( n1 ^ 2 ) );
mag2 = Sqrt( Sum( n2 ^ 2 ) );
// Compute angle in degrees
cosTheta = dotProd / (mag1 * mag2);
thetaRad = ACos( cosTheta );
thetaDeg = thetaRad * (180 / Pi());
// Display result
New Window( "Angle Between Planes",
Text Box( "Angle (degrees): " || Char( thetaDeg ) )
);
Je n'ai aucune idée du reste du script, mais la ligne 33 n'est pas écrite en JSL.
n1 = [a1, b1_, -1];
n2 = [a2, b2_, -1];
Cela devrait probablement ressembler davantage à
n1 = a1 || b1_ || -1;
or perhaps
n2 = a2 |/ b2_ |/ -1;
l'exemple n1 devrait créer un vecteur ligne et le n2 devrait créer un vecteur colonne.
Et le produit scalaire est probablement faux aussi, vous devriez le rechercher et déterminer si la multiplication élément par élément de JMP est ce dont vous avez besoin ; le * est une multiplication matricielle qui n'est peut-être pas l'opérateur dont vous avez besoin.