要检查光线三角形的碰撞,我们可以先看看光线是否与三角形的平面发生碰撞。如果是这样,我们然后检查交点是否位于所有三角形的同一侧。如果属实,这意味着该点位于三角形内部。此过程类似于矩形和其他凸形图形。在“圆形列表”中懒惰地生成相邻元素对
这是属于矩形(逆时针排序)顶点的列表:
vertexes = [ll, lr, ur, ul]
,我想生成与它的一切方面的列表;也就是说,所有相邻的一对顶点:
vertexPairs = [(ll, lr), (lr, ur), (ur, ul), (ul, ll)]
(请注意,最后一个顶点,UL,也对,在第一个,LL)
我怎样才能懒洋洋地产生这样的一个通用凸几何图形的列表,假设我有一个有序的顶点列表?
的想法是每对饲料的功能,isInside,并检查是否所有的返回值都是一样的。这是我在做什么:
1. vertexes = [<list of vertexes>]
2. vertexPairs = ???
3. results = map (\(v1, v2) -> isInside point v1 v2) vertexPairs
4. allequal = all (== head results) (tail results)
因为Haskell是惰性的,如果isInside一个调用返回,从第一次调用的返回值不同的值,以呼叫中的所有结束(4号线) 。同样,我想以一种懒惰的方式生成列表。
当我写这个问题,我想到了一个可能的解决方案的生成对:
vertexPairs = zip (vertexes) (tail vertexes ++ [head vertexes])
- 这是懒惰?我会这样说,因为它不使用最后或类似的函数,但我还是比较新的Haskell。
- 由于连接和单元素列表,它也看起来有点难看。有没有更好的办法?
- 作为一个相关的问题,第3行的自由点符号应该是什么?
非常明确的答案,谢谢。我想这是一件好事,我的解决方案并不是那么糟糕:) – CanisLupus 2013-04-28 17:30:55