[p5.js 2.0+ Bug Report]: Vector.slerp() does not work correctly for vectors of more than three dimensions
Los mantenedores suelen responder en 2 días
@Aman-goel-04 ya está trabajando en esto.
Desde el 25/7/2026.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 72/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- javascript
- Área
- computer-graphics
Línea de trabajo
Comienza con los puntos de entrada de instancia y estático p5.Vector.slerp() descritos en el issue y luego reproduce el ejemplo 4D proporcionado. Compara el comportamiento actual basado en cross() con la fórmula general de slerp propuesta, comprobando al mismo tiempo que los resultados 2D y 3D no cambien. Se considera terminado cuando la interpolación 4D produce el vector esperado y se conserva el comportamiento existente de dimensiones inferiores.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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);
}
}
- Lenguaje dominante
- JavaScript
- Estrellas
- 24.1k
- Forks
- 3.9k
- Merge medio
- 3 d 4 h
- PR fusionados (30 d)
- 29
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de processing/p5.js
-
Add unit tests for noiseDetail()Posiblemente ocupada @harshiltewari2004 la tomó hace 1 día. AbiertoArea:Math Enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
processing/p5.js#9253 · 2 comentarios · 1 asignado ·
Los mantenedores suelen responder en 2 días
-
[p5.js 2.0+ Bug Report]: storeItem() validation branches are missing `return`, so bad input throws a TypeError or is stored anywayPosiblemente ocupada @iUjjwalRaj la tomó hace 8 días. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
processing/p5.js#9242 ·
Los mantenedores suelen responder en 2 días
-
[p5.js 2.0+ Bug Report]: getURLParams() mis-parses valueless parameters and never percent-decodes valuesPosiblemente ocupada @mayanksingh-7974 la tomó hace 3 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
processing/p5.js#9241 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
[p5.js 2.0+ Bug Report]: Typo in Spanish reference documentation for ellipseMode()Quizá libre de nuevo @cgutierrezval la tomó hace 11 días y no hay ningún pull request abierto. AbiertoInternationalization p5.js 2.0+
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
processing/p5.js#9231 · 3 comentarios ·
Los mantenedores suelen responder en 2 días
-
[p5.js 2.0+ Bug Report]: ReferenceError: p5 is not defined when calling loadPixels/get/copy/mask on p5.MediaElement in ESMPosiblemente ocupada @Pcmhacker-piro la tomó hace 16 días. AbiertoArea:Core Area:DOM
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
processing/p5.js#9189 · 1 comentario ·
Los mantenedores suelen responder en 2 días
Todos los issues de processing/p5.js
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 8 días
-
docs(stream-protocol): document messageMetatadata on start/finish and the message-metadata chunkAbiertofactory-active task-identify-harness-labels-done task-identify-issue-type-done
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
vercel/ai#23375 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
feature request
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
docs hacktoberfest help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
pacocartones/free-llm-api-hub#347 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
wpilibsuite/wpilib-docs#3378 ·
Los mantenedores suelen responder en 1 día