광선 - 삼각형 충돌을 검사하기 위해 광선이 삼각형 평면과 충돌하는지 먼저 확인할 수 있습니다. 그렇다면 교차점이 모든 삼각형면에 대해 같은면에 있는지 확인합니다. true이면 점이 삼각형 안에 있음을 의미합니다. 이 절차는 직사각형 및 다른 볼록한 그림과 유사합니다. "원형 목록"에서 인접 요소 쌍의 게으른 생성
이
는 사각형 (주문한 시계 반대 방향)에 속하는 정점의 목록입니다vertexes = [ll, lr, ur, ul]
을 나는 모든 측면과 함께 목록을 생성 할;
이vertexPairs = [(ll, lr), (lr, ur), (ur, ul), (ul, ll)]
(마지막 정점, UL, 첫 번째와도 쌍, LL 참고)
가 어떻게 유유히 등의 생성 수 있습니다 즉, 정점의 모든 인접한입니다 일반적인 꼭지점 목록이 있다고 가정 할 때 일반적인 convex geometric figure의 목록?
아이디어 함수 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)
하스켈은 에, 호출 모든 끝 (라인 4) isInside에 대한 호출이 첫 번째 호출의 반환 값과 다른 값을 반환하는 경우, 게으른이기 때문에 . 마찬가지로, 나는 vertexPairs 목록을 게으른 방법으로 생성하는 방법을 원했습니다.
vertexPairs = zip (vertexes) (tail vertexes ++ [head vertexes])
- 이 게으른 :이 질문을 작성되면서
, 나는 쌍을 생성하는 가능한 솔루션 생각? 그것이 또는 유사한 기능을 사용하지 않기 때문에 나는 말할 것입니다,하지만 나는 아직도 하스켈에 비교적 새입니다.
- 연결 및 단일 요소 목록 덕분에보기에도 약간 못 생겼습니다. 더 좋은 방법이 있습니까?
- 관련 질문으로 3 번 줄의 자유 점 표기법은 무엇입니까?
매우 명확한 답변, 감사합니다. 나는 내 솔루션이 그다지 나쁘지 않았다는 것이 좋은 것 같아요 :) – CanisLupus