Search code examples
geometrywebgl

Function to find the rectangle angle of the triangle that contains a given point


diagram explaining the case

In a webgl / fragment shader context. I have a uv space. Is filled of right angle triangles as the image shows. Notice that "c0" is at 0.5 , 0.5. "ac" side is 0.25 "bc" side is 0.1666 (1/6) I looking a way to, given a point "p" in uv coordinates, obtain the coordinates of the right angle "c" of the triangle that contains that point.

Edit: Im working in webgl and looking for a function like: vec2 getAngleC(vec2 p)

I tried creating the function by my self and using ChatGPT 4 which seams to get confused.


Solution

  • First find the square that the point lies in.

    x = Math.trunc(u/ac);
    y = Math.trunc(v/bc);
    

    That gives you the index of the square. We can use local coordinates within the square.

    lx = u - x*ac;
    ly = v - y*bc;
    

    Next you have to find which way the diagonal line is going. Lets call top left to bottom right "even" and top right to bottom left "odd".

    sig = (x%2 + y%2)%2;
    

    If the sig is 0, then you have an even square. (as in your example). Which means the line going through the square is defined as.

    h = bc - lx*bc/ac;
    if( ly > h ){
        cx = (x+1) * ac;
        cy = (y+1)* bc;
    } else{
        cx = x*ac;
        cy = y*bc;
    }
    

    cx and cy are the u,v coordinates of right angle of interest.

    Case 2. Odd. We do the same think.

    h = lx*bc/ac;
    
    if(ly > h){
        cx = x*ac;
        cy = (y + 1)*bc;
    } else{
        cx = (x+1)*ac;
        cy = y*bc;
    }
    

    I hope that helps. I made some assumptions about your problem and assumed you're using javascript. Maybe this is in the shader though and you might need to change a little bit.