Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

[p5.js 2.0+ Bug Report]: Vector.slerp() does not work correctly for vectors of more than three dimensions

Ouverte
#8,928 7 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 3 jours

@Aman-goel-04 y travaille déjà.

Depuis le 25/7/2026.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
72/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Calme
Stack technique
javascript

Piste de recherche

Commencez par les points d’entrée d’instance et statique p5.Vector.slerp() décrits dans l’issue, puis reproduisez l’exemple 4D fourni. Comparez le comportement actuel basé sur cross() avec la formule générale de slerp proposée, tout en vérifiant que les résultats 2D et 3D restent inchangés. La tâche est terminée lorsque l’interpolation 4D produit le vecteur attendu et que le comportement existant pour les dimensions inférieures est préservé.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Area:Math p5.js 2.0+
Most appropriate sub-area of p5.js?
  • Accessibility
  • Color
  • Core/Environment/Rendering
  • Data
  • DOM
  • Events
  • Image
  • IO
  • Math
  • Typography
  • Utilities
  • WebGL
  • WebGPU
  • p5.strands
  • Build process
  • Unit testing
  • Internationalization
  • Friendly errors
  • Other (specify if possible)
p5.js version

2.3.0

Web browser and version

Brave 1.90.122

Operating system

Linux Mint 22.1

Steps to reproduce this
Steps:
  1. Create two 4D vectors
  2. Use slerp() to interpolate between the two
  3. Note the result is incorrect
Snippet:
function setup() {
  let c = 0.5;
  let v1 = createVector(0, 1, 0, 1);
  let v2 = createVector(1, 0, 1, 0);
  v1.slerp(v2, 0.5);
  
  // v1 should be vector[0.707, 0.707, 0.707, 0.707] but is actually vector[0.5, 0.707, 0.5, 1]
  print(v1.toString());
}
Discussion

slerp() currently uses cross() for its computation, which is only defined for 3D vectors. It needs to use a more general formula, which is readily available on the web; search for "slerp formula".

Feel free to adapt the following (to both the instance and static methods). In my brief testing, it gives the same result as the current slerp() for 2D and 3D vectors, and also seems to work correctly for 4D vectors. It can certainly be optimized.

function slerp(v0, v1, t) {
  let m = v0.mag() + (v1.mag() - v0.mag()) * t;
  let r0 = p5.Vector.normalize(v0);
  let r1 = p5.Vector.normalize(v1);
  let a = acos(r0.dot(r1));
  if (a === 0) {
    return p5.Vector.add(v0, p5.Vector.sub(v1, v0).mult(t));
  } else {
    r0.mult(sin((1 - t) * a) / sin(a));
    r1.mult(sin(t * a) / sin(a));
    return r0.add(r1).mult(m);
  }
}
Langage dominant
JavaScript
Étoiles
24.1k
Forks
3.9k
Merge moyen
2 j 22 h
PR mergées (30 j)
38

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de processing/p5.js

Toutes les issues de processing/p5.js

Issues similaires

Plus d'issues JavaScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.