diff --git a/src/cg/testing.ts b/src/cg/testing.ts index 58ed4da62fe9e08eb39a92d7203a5f202bc7fe3f..d20e5217eb7da99c9e1177f336e0fbd23c6daceb 100644 --- a/src/cg/testing.ts +++ b/src/cg/testing.ts @@ -1,18 +1,31 @@ import Playground from "./playground"; import { vecNormalize } from "./utils"; import { vecLength } from "./utils"; +import { vecDotProduct } from "./utils"; +import { vecAngle } from "./utils"; const pg = new Playground(); // Some vectors -const v = [2,2,3] +const v = [1,0,1] +const w = [0,0,2] -const normalized = vecNormalize(v); +const vNormalized = vecNormalize(v); +const wNormalized = vecNormalize(w); -console.log(vecLength(normalized)); +const dotProduct = vecDotProduct(v, w); +const normalizedDotProduct = vecDotProduct(vNormalized, wNormalized); // Visualize pg.gridXZ(); // Grid pg.visVector(v,{color:"orange",label:"V"}); -pg.visVector(normalized,{color:"red",label:"normalized"}); +pg.visVector(w,{color:"red",label:"W"}); + +console.log("v length:" + vecLength(v)); +console.log("w length:" + vecLength(w)); +console.log("dotProduct:" + dotProduct); +console.log("vnormalized length:" + vecLength(vNormalized)); +console.log("wnormalized length:" + vecLength(wNormalized)); +console.log("normalizedDotProduct:" + normalizedDotProduct); +console.log("angle v w:" + vecAngle(v, w)); \ No newline at end of file diff --git a/src/cg/utils.ts b/src/cg/utils.ts index c04275caa120984ed34db817f72c9a5d1a2a0f1e..9582fe45c1930bcbec773f0fa0fa33e22199c978 100644 --- a/src/cg/utils.ts +++ b/src/cg/utils.ts @@ -53,4 +53,13 @@ export function vecDotProduct(vecOne: Array<number>, vecTwo: Array<number>){ let dotProduct = vecOne[0]*vecTwo[0] + vecOne[1]*vecTwo[1] + vecOne[2]*vecTwo[2]; return dotProduct; } + +export function vecAngle(vecOne: Array<number>, vecTwo: Array<number>){ + //calculate radiant + let radiant = Math.acos(vecDotProduct(vecOne, vecTwo) / (vecLength(vecOne) * vecLength(vecTwo))) + + //convert into degrees + let degrees = radiant * 180 / Math.PI; + return degrees; +} // \ No newline at end of file