캔버스의 크기가 다른 경우 회전이 캔버스에 적용될 때 캔버스 XY 조합을 얻는 데 도움이 필요합니다.캔버스 높이와 너비가 다른 경우의 회전 논리
0
A
답변
0
귀하의 질문에 '수학'태그가 포함되어 있지만 코드가 없으므로 이야기의 수학적 해결책을 알려 드리겠습니다.
문제는 발견 한 것처럼
, 브라우저의 마우스 이벤트가 회전되지 않은 공간보다는 회전 캔버스 좌표는 clientX & clientY로 값을 반환합니다.
전위 용액
캔버스의 현재 회전 상태를 추적하기 위해, 만약 아핀 변환 행렬를 사용할 수있다. 어파 인 매트릭스는 3x3 매트릭스의 9 개 요소 중 6 개를 사용하여 모든 캔바스 변환에 대한 누적 정보를 보관합니다. 회전, 번역, 비율 등. 행렬은 단순히 6 개의 요소의 배열로 표현 될 수 있습니다.
var matrix=[ 1, 0, 0, 1, 0, 0 ];
캔버스 요소는 이러한 변형 행렬을 유지하지만 불행히도 (예기치 않게) 변형 행렬이 숨겨져 있습니다.
효과적인 솔루션 그래서 대안으로
, 당신은 상황에 변환 명령을 실행할 때마다, 당신은 당신이 자신을 유지하는 변형 행렬에 그 변경 사항을 반영 할 수 있습니다. 이 방법으로 행렬이 얼마나 많은 회전이 있더라도 현재의 회전 상태를 캔버스에 "저장"합니다.
그런 다음 회전되지 않은 공간에 정의 된 마우스 [x, y]를 가져올 때 해당 회전 행렬을 사용하여 회전되지 않은 마우스 좌표를 회전 된 캔버스 공간으로 변환 할 수 있습니다.
// convert mouse coordinates to transformed canvas coordinates
function tmPoint(matrix, mouseX, mouseY){
return({
canvasX: mouseX*matrix[0] + mouseY*matrix[2] + matrix[4],
canvasY: mouseX*m[1] + mouseY*matrix[3] + matrix[5]
};
}
방법에 ...
당신은 '배우 업'할 수 변환이 여기 행렬에 :
https://blog.safaribooksonline.com/2012/04/26/html5-canvas-games-tracking-transformation-matrices/
관련 문제
- 1. 높이와 너비가 다른 CSS 스프라이트
- 2. 높이와 너비가 고려되지 않음
- 3. 캔버스 fillRect 높이와 너비가 항상 기울어 짐/왜곡 됨
- 4. plupload 높이와 너비가 8000x8000px 이상
- 5. 텍스트보기 높이와 너비가 변경되지 않습니까?
- 6. 높이와 너비가 아무것도 안 함
- 7. 캔버스 논리 문제
- 8. 플렉스, 카메라의 높이와 너비가 비디오 디스플레이와 다른 스냅 샷을 캡처하십시오.
- 9. 배열의 너비가 높이와 다른 곳에서 2D 동적 배열을 만들려고합니다.
- 10. 셀렌 webdriver를 사용하여 다른 브라우저에서 높이와 너비가 다름
- 11. 자바 스윙 이미지는 항상 높이와 너비가 -1입니다.
- 12. Silverlight에서 선 그리기 ... 캔버스 너비가 유효하지 않습니다.
- 13. 부트 스트랩의 높이와 너비가 같은 상자입니까?
- 14. 캔버스, 애니메이션 텍스트 회전
- 15. html textlabel 높이와 너비가 변경되지 않습니다
- 16. 단추의 화면 높이와 너비가 동일하게 만들기
- 17. Blackberry 플레이어 화면의 비디오 높이와 너비가 증가
- 18. 인터페이스 빌더의 "너비가 높이와 같음"제약
- 19. Gtk 위젯 높이와 너비가 완전히 줄었습니다.
- 20. 높이와 너비가 동일한 네 개의 div
- 21. 높이와 너비가 컨트롤러의 너비와 높이를 설정하십시오.
- 22. 전체 창 캔버스 회전
- 23. iPad 캔버스 회전
- 24. 캔버스 회전 반전 X
- 25. 캔버스 이미지 회전 문제
- 26. 안드로이드에서 회전 캔버스
- 27. 캔버스 애니메이션 회전 이미지
- 28. 캔버스 : '캔버스'로 이미지 회전
- 29. 캔버스 회전 입자
- 30. 찾기 캔버스 회전
무슨 뜻 이죠 :-) 질문을 명확히하십시오 캔버스 XY 좌표를 얻으시겠습니까? 주 : context.rotate (angle)은 전체 캔버스 좌표계를 회전시킵니다. 회전 및 그리기 후에 캔버스를 기본 좌표계로 복원하지 않은 경우 새로운 그리기가 여전히 회전 된 공간에있게되어 회전되지 않은 좌표로 그릴 수 있고 캔버스가 회전합니다. 그러나 브라우저 마우스 핸들러는 캔버스 회전을 전혀 모르기 때문에 마우스 핸들러의 마우스 좌표는 캔버스가 여전히 회전되어 있어도 회전되지 않은 좌표로 나타납니다. – markE
마우스 이벤트의 XY 좌표를 내 캔버스 현재 회전 상태와 매핑하는 방법은 무엇입니까? –