[p5.js 2.0+ Bug Report]: Vector.slerp() does not work correctly for vectors of more than three dimensions
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
- Domaine
- computer-graphics
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
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:
- Create two 4D vectors
- Use slerp() to interpolate between the two
- 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
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de processing/p5.js
-
Area:WebGL p5.js 2.0+
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
processing/p5.js#9302 ·
Les mainteneurs répondent en général sous 3 jours
-
[p5.js 2.0+ Bug Report]: key docs needs updatingPeut-être pris @MannXo l’a pris aujourd’hui. OuverteHelp Wanted
Difficulté 1/5 Moins d'une heure Accessibilité débutants 62/100
processing/p5.js#9296 · 5 commentaires · 1 réaction ·
Les mainteneurs répondent en général sous 3 jours
-
False positive FES warning for loadModel(path, callback)Peut-être pris @xsupremeyx l’a pris il y a 1 jour. Ouvertep5.js 2.0+
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
processing/p5.js#9295 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 3 jours
-
Add unit tests for noiseDetail()Peut-être pris @harshiltewari2004 l’a pris il y a 3 jours. OuverteArea:Math Enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
processing/p5.js#9253 · 2 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 3 jours
-
[p5.js 2.0+ Bug Report]: storeItem() validation branches are missing `return`, so bad input throws a TypeError or is stored anywayPeut-être pris @iUjjwalRaj l’a pris il y a 10 jours. Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
processing/p5.js#9242 ·
Les mainteneurs répondent en général sous 3 jours
Toutes les issues de processing/p5.js
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
keyxmakerx/Chronicle#1469 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
suradet-ps/codeframe#40 ·
Les mainteneurs répondent en général sous 1 jour
-
data
Difficulté 1/5 Moins d'une heure Accessibilité débutants 74/100
gaseous-project/hasheous#637 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
gramps-project/gramps-web#1549 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100