用于查找包含给定点的三角形的矩形角的函数

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

提问人:Roberto Ferrero 提问时间:11/13/2023 最后编辑:Roberto Ferrero 更新时间:11/13/2023 访问量:39

问:

说明案例的图表

在 webgl / 片段着色器上下文中。 我有一个紫外线空间。如图所示,由直角三角形填充。 请注意,“c0”位于 0.5 , 0.5。 “交流”侧为 0.25 “BC”侧为 0.1666 (1/6) 我正在寻找一种方法,给定 uv 坐标中的点“p”,获得包含该点的三角形的直角“c”的坐标。

编辑:我在 webgl 中工作并寻找如下功能: vec2 getAngleC(vec2 p)

我尝试自己创建函数并使用 ChatGPT 4,这会让人感到困惑。

几何 WebGL

评论

0赞 matt 11/13/2023
什么是“矩形角”?所以你有点 p,你想知道点 p 所在的直角三角形的坐标吗?你能包括你尝试过的东西吗?这有点挑战性,因为你分割矩形的方式很奇怪。
0赞 Roberto Ferrero 11/13/2023
对不起@matt你是对的。“矩形角度”实际上是“直角(90º)”。这个问题是 webgl 中这个 other 的简化:ibb.co/mTxy16f

答:

0赞 matt 11/13/2023 #1

首先找到点所在的正方形。

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

这为您提供了正方形的索引。我们可以在正方形内使用局部坐标。

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

接下来,您必须找到对角线的走向。让我们称左上角到右下角为“偶数”,将右上角到左下角称为“奇数”。

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

如果 sig 为 0,则你有一个偶数正方形。(如您的示例所示)。这意味着穿过正方形的线被定义为。

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

CX 和 CY 是感兴趣的直角的 U,V 坐标。

案例 2.奇怪。我们也是这么想的。

h = lx*bc/ac;

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

我希望这会有所帮助。我对你的问题做了一些假设,并假设你使用的是javascript。也许这是在着色器中,您可能需要稍微更改一下。