2010-04-17 2 views
3

나는 원의 위를 플로팅하고있는 raphael.js 모양을 가지고 있습니다. 원이 그려지는 도형의 경계를 벗어나지 않는 경우에만 원이 나타나기를 원합니다. 포인트가 raphael.js 모양의 안쪽 또는 바깥쪽에 있음

이 더 분명, 여기에 내가 일하지 않으려는 무엇의 예입니다 만들려면 :

Example http://img682.imageshack.us/img682/4168/shapeh.png

내가하지 표시 회색 영역의 외부 원을 원한다. 원이 회색 모양의 안쪽이나 바깥쪽에 있으면 어떻게 감지 할 수 있습니까? 점 폐쇄 경로 내에있는 경우 dertermine하는

답변

3

원을 포함하는 그룹 (<g> 요소)에 클립 경로 (예 : 사용자의 회색 모양으로 정의되어야 함)를 적용하면됩니다.

클립 경로 사용 방법은 w3c SVG testsuite에서 this example을 참조하십시오.

+0

이 방법이 효과적 이었지만, 그걸로 잘 놀기 위해서 라파엘 jj를 해킹해야했습니다. Raphael.js는 사각형 만 지원하므로 코드를 약간 수정 해 추가했습니다. 자세한 내용은 http://github.com/DmitryBaranovskiy/raphael/issues/issue/100/#comment_212698을 참조하십시오. NB. 나는 이것이 끔찍한 고침이라는 것을 알고 있지만 그것이 효과가 있으며, 현재는 그것이 내가 염려하는 전부이다. – betamax

4

한 가지 가능한 방법이있다 :

  1. 는 외부 형상 확실히있는 좌표를 선택.
  2. 해당 지점에서 실제 점으로 줄을 지정하십시오.
  3. 개수, 선이 경로와 교차하는 빈도입니다.
  4. 교차 수가 홀수이면 포인트가 내부입니다. 그것이 짝수이면 요점은 바깥입니다.

나는 raphael.js를 전혀 모르기 때문에 그 점이 도움이되는지 잘 모르겠습니다. 그러나 문제에 대한 기하학적 접근 방식입니다.

+0

흥미 롭습니다. 상호 작용을 계산하는 방법은 무엇입니까? 명령이 있습니까? 아니면 직접해야합니까? – Bakaburg

+0

죄송합니다. 직접 해결해야합니다. 방금 수학 개념을 설명했습니다. – selfawaresoup

1

"Hit-testing SVG shapes?"과 매우 유사합니다.

원의 위치에서 getIntersectionList()를 호출하고 큰 회색 모양을 반환하는지 확인하면됩니다.

+0

고마워 이것이 단단한 해결책처럼 보이지만 참조 된 블로그 게시물에 따르면, 이것은 나를 위해 요구되는 Firefox/Safari에 의해 아직 제대로 지원되지 않습니다. 나는 이것을 원래 게시물에 언급해야했다. – betamax

+0

아마 내가 오해하고 있지만, 그의 블로그 게시물에서 예제를 시도했지만 Firefox, Safari 및 Chrome에서 제대로 작동했습니다. – Ken

+0

아, 그냥 사파리 나 파이어 폭스에서 지원하지 않는다고 말한 게시물의 텍스트로 가고 있었지만 그 예가 나에게도 효과가있는 것 같다. 마스크보다 조금 더 견고하기 때문에 이것을 확인해야합니다. 감사! – betamax

관련 문제