gpt4 book ai didi

grid - 给定简单的二维笛卡尔坐标,在等边三角形网格中进行索引

转载 作者:行者123 更新时间:2023-12-01 05:15:05 24 4
gpt4 key购买 nike

我有一个像这样构造的等边三角形网格:

enter image description here

现在,鉴于 2D 坐标原点是图像左下角的红点,我需要找到这个三角形网格的索引。

给定输入 : 感兴趣的点(浮点)的 X 和 Y 坐标,三角形边长和高度

需要输出 :三角形的 X 和 Y 索引。 (示例索引在图像中看到)

获取三角形的 Y(行)坐标很简单,因为它只是 (GivenY/TRIANGLE_HEIGHT) 的整数部分,但我无法在不进行大量操作的情况下计算所需的 X 坐标。

最佳答案

这是一个更明确的答案,适用于有问题(或太懒惰)无法弄清楚几何形状的人。

首先将坐标缩放到方便的基础

vec2 pos=(input-origin)/vec2(edge/2,median);

将您的坐标拆分为整数和小数部分
int x=pos.x, y=pos.y; float u=pos.x-x, v=pos.y-y;

测试对角线(不同奇偶校验的 x,y)或反对角边(相同奇偶校验的 x,y)
if(x%2 ^ y%2) { if(v+u<1) x--; } else { if(v-u>0) x--; }

就是这样 (x,y) 现在是你的人脸指数。

为每个面查找顶点索引有点复杂。

您有四种情况,以下是每个面的 CCW 顶点索引列表:
face  vertices
xy xy xy xy
00 -> 00 10 01
10 -> 11 01 10
01 -> 01 12 02
11 -> 12 01 11

如果不将 1 添加到 y 顶点索引,则更容易查看模式,因此您的最终表格是:
00 -> 00 10 01
10 -> 11 01 10
01 -> 00 11 01
11 -> 11 00 10

每列分别为:x, x, !x, x^y, x, !x。或者,您可以简单地使用查找表。

它适用于任意人脸索引,您只需要添加 (x/2, y) 并在 (x%2, y%2) 上进行查找。

最后,三角形顶点索引为:
x/2 + x%2, y + x%2; x/2 + !(x%2), y + (x%2^y%2); x/2 + (x%2), y + !(x%2)

在原始笛卡尔空间中具有顶点坐标:
origin+vec2(2*x+y%2),y)*vec2(edge/2,median)

关于grid - 给定简单的二维笛卡尔坐标,在等边三角形网格中进行索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8043947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com