Le produit croisé de deux vecteurs tridimensionnels et est le vecteur unique tel que:
→ a → b est orthogonal à et
La magnitude de est égale à l'aire du parallélogramme formé par et
Les directions de , et , dans cet ordre, suivent la règle de droite .
Il existe quelques formules équivalentes pour les produits croisés, mais l'une est la suivante:
où , et sont les vecteurs unitaires dans les première, deuxième et troisième dimensions.
Défi
Étant donné deux vecteurs 3D, écrivez un programme ou une fonction complète pour trouver leur produit croisé. Les fonctions intégrées qui calculent spécifiquement le produit croisé ne sont pas autorisées.
Contribution
Deux tableaux de trois nombres réels chacun. Si votre langue n'a pas de tableaux, les numéros doivent toujours être regroupés en trois. Les deux vecteurs auront une magnitude . Notez que le produit croisé n'est pas commutatif ( ), vous devriez donc avoir un moyen de spécifier l'ordre.
Production
Leur produit croisé, dans un format raisonnable, avec chaque composant précis à quatre chiffres significatifs ou , selon le plus lâche. La notation scientifique est facultative.
Cas de test
[3, 1, 4], [1, 5, 9]
[-11, -23, 14]
[5, 0, -3], [-3, -2, -8]
[-6, 49, -10]
[0.95972, 0.25833, 0.22140],[0.93507, -0.80917, -0.99177]
[-0.077054, 1.158846, -1.018133]
[1024.28, -2316.39, 2567.14], [-2290.77, 1941.87, 712.09]
[-6.6345e+06, -6.6101e+06, -3.3173e+06]
C'est le code-golf , donc la solution la plus courte en octets l'emporte.
Maltysen a affiché un défi similaire , mais la réponse a été médiocre et la question n'a pas été modifiée.
la source
Réponses:
Gelée,
141312 octetsEssayez-le en ligne!
Comment ça fonctionne
Version non concurrente (10 octets)
OK, c'est embarrassant, mais le langage de manipulation de tableau Jelly n'avait pas de fonction intégrée pour la rotation du tableau jusqu'à présent. Avec ce nouveau intégré, nous pouvons économiser deux octets supplémentaires.
Cela utilise l'approche de la réponse J de @ AlexA . Essayez-le en ligne!
Comment ça fonctionne
la source
LISP,
128122 octetsSalut! Voici mon code:
Je sais que ce n'est pas la solution la plus courte, mais personne n'en a fourni une à Lisp jusqu'à présent :)
Copiez et collez le code suivant ici pour l'essayer!
la source
Dyalog APL, 12 octets
Basé sur la réponse J de @ AlexA. Et (par coïncidence) équivalent à l'amélioration de @ randomra dans la section commentaire de cette réponse.
Essayez-le en ligne sur TryAPL .
Comment ça fonctionne
la source
J,
2714 octetsIl s'agit d'un verbe dyadique qui accepte les tableaux à gauche et à droite et renvoie leur produit croisé.
Explication:
Exemple:
Essayez-le ici
13 octets enregistrés grâce à randomra!
la source
*2&|.
est une fourchette de deux verbes:*
et2&|.
. Il multiplie l'entrée gauche par une entrée pivotée de 2 droite. Cette fourchette est stockée dansv
donc lorsque nous écrivonsv~
, elle est équivalente à(*2&|.)~
, où les~
échanges les paramètres d'entrée gauche et droite pour la partie entre parenthèses.C,
156154150148 148144 octetsJe ne gagnerai aucun prix pour la durée, mais j'ai pensé que j'aurais quand même un essai.
Démo
Non golfé:
la source
for
n'a pas besoin{}
Haskell, 41 octets
Une solution simple.
la source
Bash + coreutils, 51
bc
effectue l'évaluation arithmétique avec la précision requise.L'entrée se présente sous la forme de deux listes séparées par des virgules sur la ligne de commande. Sortie sous forme de lignes séparées par des sauts de ligne:
la source
MATL , 17 octets
La première entrée est a , la seconde est b .
Essayez-le en ligne!
Explication
la source
Pyth, 16 octets
Essayez-le en ligne: Démonstration
Explication:
la source
K5,
44403732 octetsA écrit celui-ci il y a un bon moment et l'a repoussé récemment .
En action:
Modifier 1:
4 octets enregistrés en prenant l'entrée comme une liste de listes au lieu de deux arguments distincts:
Modifier 2:
Économisé 3 octets en calculant une table de recherche avec décodage de base:
Modifier 3:
Économisez 5 octets en réorganisant l'application pour permettre d'utiliser une définition tacite au lieu d'un lambda local. Malheureusement, cette solution ne fonctionne plus en oK et nécessite l'interpréteur k5 officiel. Je vais devoir croire sur parole jusqu'à ce que je corrige le bogue dans oK:
la source
Rubis , 49 octets
Essayez-le en ligne!
De retour après 2 ans, j'ai réduit 12 octets en utilisant la façon dont Ruby traite les indices de tableau négatifs.
-1
est le dernier élément du tableau,-2
l'avant-dernier etc.Rubis, 57
En programme de test
la source
Python,
7348 octetsMerci @FryAmTheEggman
Ceci est basé sur la définition des composants du produit vectoriel croisé.
Essayez-le ici
la source
lambda (a,b,c),(d,e,f):...
devrait économiser beaucoup.Gelée , 5 octets
Z
Essayez-le en ligne!
Voici une explication PDF au cas où le démarquage SE ne pourrait pas le gérer.
Le produit croisé sous forme analytique
Après les réarrangements et calculs nécessaires:
La relation étroite avec les déterminants matriciels
Il y a une chose intéressante à noter ici:
Explication du code de gelée
Eh bien ... pas grand chose à expliquer ici. Il génère juste la matrice:
Et pour chaque paire de matrices voisines, il calcule le déterminant de la matrice formée en joignant les deux.
la source
Wolfram Language (Mathematica) ,
3833 octetsEssayez-le en ligne!
la source
ES6, 40 octets
44 octets si l'entrée doit être composée de deux tableaux:
52 octets pour une version plus intéressante:
la source
Julia 0,7 ,
4539 octetsEssayez-le en ligne!
Utilise la formule basée sur les déterminants donnée dans la description de la tâche.
Merci à H.PWiz pour -6 octets.
la source
f(a,b)=1:3 .|>i->det([eye(3)[i,:] a b])
APL (NARS), 23 caractères, 46 octets
tester:
la source
Pari / GP , 41 octets
Essayez-le en ligne!
la source