回答
你想要做的就是尽可能地把它变成一个网格,因为网格很容易处理。
你要做的第一件事就是确定它所在的列。你说你存储它,所以它应该更容易做一些简单的整数除法。简单。
之后,你想弄清楚它显示的是什么三角形。如何将其部分转换为网格,是假设您有一堆直角三角形而不是一堆等轴三角形。
三角形沿着y轴(列的一侧)有一个长度。将这个数字分成两部分,计算出你有多少步骤。根据下降的步骤数,如果列是偶数或奇数会告诉你,如果你正在看:
+--------+
|-_ |
| -_ |
| -_ |
| -_|
+--------+
或相反。此时,您只需确定它所在的线条的哪一侧以确定其所在的哪个直角三角形,这也会告诉您它处于哪个等角三角形中。
您有几个选项可供选择。
- 你可以使用类似Bresenham的线算法来对斜边进行光栅化处理,并且当你点击列时,如果你在该行的上方或下方,就可以开始工作;
- 因为你在这里只有两个可能的网格(一个是另一个的反向,所以它实际上只有一个)。你可以存储一个行值的数组,说第3列的斜边是在偏移量2,而6是4,依此类推。
甚至可以使用(1)生成(2)作为快速查找。
唯一要考虑的其他事情是如果鼠标光标在边缘上会发生什么?
这与cletus所说的类似,但是我认为它有不同的看法。
我假定三角形侧1.
假设有如下的网格:
y'
/
/__/__/__/__/__/__/
/__/__/__/__/__/__/
/__/__/__/__/__/__/____ x'
(0,0)
如果考虑在一个坐标系统中的网格,其中在x & y轴在角度系统(x',y')中的坐标将对应于正交系统中的坐标(具有与轴的总体方向相同的原点)到(x,y)的点, 。
在你的问题中,给出(x,y),我们需要找到(x',y'),然后找出三角形。
如果i沿x和j中的单位向量沿着y中的正交的,那么我们有
x'* i + y'(i/2 + sqrt(3) * j /2) = xi + yj.
(基本上,单元沿着该 '成角度' y轴的矢量为i/2 + SQRT(3 )/ 2 * j。沿着x轴的单位向量与正常的x轴相同,即i)。
因此
x' + y'/2 = x
y' * sqrt(3)/2 = y
求解得到:
y' = 2*y/sqrt(3)
x' = x - y/sqrt(3)
现在假设x '和y' 为正。
现在如果c = [X '],x的整数部分'
和r = [Y '],y的整数部分'
然后在(角度)的网格,所述点位于第c列和第r行。 (正确计数并从0开始计数)。
因此,我们为了找出它是三角形的话,可以考虑x的小数部分“和y”你点缩小到一个平行四边形
____
/\ */
/___\/
(c,r)
现在。
{x} = x' - [x'] = x' - c.
{y} = y' - [y'] = y' - r.
现在,
如果{x} + {y} > 1
,则该点位于三角形标记*。 if {x} + {y} < 1
,则该点位于另一个三角形中。 if {x} + {y} = 1
,则该点位于两个三角形共有的线上。
希望也有帮助。
- 1. 检查点集三角形细分是一个三角形
- 2. 在三角形的三角形中绘制三角形
- 3. 在GDI +中绘制一个三角形给定一个矩形
- 4. 三角形网格中最近的点
- 5. 检查网格的每个三角形是否与另一个网格的三角形相交
- 6. 三角形网格的MeshGrid
- 7. 检查一个正方形的哪个三角形是给定的坐标
- 8. 三角形中的三角形CSS
- 9. 三角形网格上的最近点
- 10. 六边形内有6个等边三角形,给定一个x,y坐标,我怎样才能确定坐标在哪个等边三角形中?
- 11. 在三角形多边形网格中计算一个洞
- 12. 两个三角形的方形网格没有在三个js中呈现
- 13. 矩形网格内的三角形
- 14. 插值三角形网格
- 15. 发现一个矩阵是上三角形,下三角形还是对角线
- 16. 获取三角形内的三角形?
- 17. 连接两个三角形网格
- 18. 爪哇:一个三角形
- 19. 找到一个三角形
- 20. 输出一个三角形
- 21. 创建一个三角形
- 22. 三角形网格点云插值
- 23. 给定一组三角形的长度,找到最大面积三角形
- 24. 3D三角形 - 三角形交叉点多边形
- 25. 将三维网格三角剖分成等距点
- 26. 将三角形网格化为网格
- 27. 从点云绘制一个3d三角形网格
- 28. 建立一个形状类三角形
- 29. 查找三维空间中三角形的点距离
- 30. opengl中的三角形多边形三角形es
取决于,顶部必须有一个三角形的小数部分,因为它不会与屏幕顶部对齐。你如何处理? –