2012-02-14 3 views
1

저는 프로젝트에 캔버스를 사용하고 있고 기울이는 많은 요소가 있습니다. 나는 단지 y 값을 비뚤어지고, 기울어 진 후에 이미지의 새로운 너비가 무엇인지 알고 싶다. 그래서 다른 캔버스 요소와 정렬 할 수있다. 내가캔버스에서 비뚤어 질 때 새 너비를 계산하십시오.

ctx.save(); 
//skew the context 
ctx.transform(1,0,1.3,0,0,0); 
//draw two images with different heights/widths 
ctx.drawImage(image,0,0,42,60); 
ctx.drawImage(image,0,0,32,25); 

이 목표는 내가 0,0를 그리기 전에 일부 번역을 할 수 있도록 42 60 이미지가 X 60 이미지로 지금 것을 알게 될 것입니다 무엇을 의미하는지에 관해 알기 위해 아래 코드를 확인하십시오. 각 이미지를 개별적으로 측정하기는 쉽지만 프로젝트 전체에서 정렬해야하는 스큐 값과 높이/너비가 다릅니다. 이미지는이 공식이 빠르게 무너 불구하고 넓은되는 때

var skewModifier = imageWidth*(8/6)+(19/3); 
var skewAmount = 1.3; //this is dynamic in my app 
var width = (skewModifier*skewAmount)+imageWidth; 

(나는 그것이 경사 식하지 이와 같은 직선 값 생각) : 현재이 코드 (25, 42 폭 사이의 이미지를 친절하게 작동)를 사용합니다. 캔버스가 왜곡에 대해 어떤 아이디어가 있습니까?

+0

입니다. 너비와 높이를 감안할 때 X에 비뚤어 질 때 이미지의 새로운 너비를 알 수 있습니까? (높이가 가로 스큐 일지라도 효과가있는 것으로 보입니다). – Jeremy

+0

좋아, 나는 점점 가까워지고있어. 나는 이제 이미지의 대각선 길이를 얻고이를 왜곡하면 나는 올바른 가치에 가깝다는 것을 알아 냈다. 여전히 꽤 아직 없습니다. 어떤 아이디어? – Jeremy

+0

'ctx.transform (1,0,1.3,0,0,0);이 아닌'ctx.transform (1,0,1.3,0,0,0);을 정말로 사용하십니까? –

답변

6

수학적으로 도출 할 수 있어야합니다. 나는 믿는다 :

Math.atan(skewAmount)은 어떤 것이 원점에 대해 왜곡되어있는 각도이다.

그래서 1.3은 물체를 0.915 라디안 또는 52 도로 비뚤어지게 만듭니다.

여기에 비뚤어져있는 동일한 개체 (녹색으로 칠해진) 옆에있는 빨간색 미사용 개체가 있습니다. 우리는 원점 각도 (0.915 래드) 알고 우리는 당신의 두 이미지 60 및 25 인접한 변의 길이를 알고

enter image description here

: 그래서 당신은 직각 삼각형이있다. (빨강의 높이).

빗변은 기울어 진 긴 변입니다.

그리고 반대쪽은 삼각형 바닥입니다. 얼마나 비뚤어졌습니다! 자바 스크립트 코드에서 반대에 대한 해결

tan(0.915) = opposite/60, 우리는이 :

opposite = Math.tan(0.915)*60

의 그래서 바닥면 내가 기억하는 경우

접선은 첫 번째에 있으므로, 인접/반대 우리를 얻는다 기울어 진 물체는 원점에서 약 77 픽셀 떨어져 시작합니다. 캔버스에 우리의 작업을 확인할 수 있습니다 :

http://jsfiddle.net/LBzUt/

나에게 잘 보이는!

당연히 삼각형은 캔버스 원점, 내가 칠한 검은 점 및 빨간색 직사각형의 왼쪽 아래 부분입니다.이 사각형은 기울이기 전에 검색하려는 원래 위치입니다.

그건 약간 우연한 설명이었습니다. 질문 있니?

+0

+1 특히 다이어그램에서 좋은 작업입니다. :) – Phrogz

+0

나는 다이어그램도 좋아한다. D 수학에 감사 드리며, 그것은 나를 위해 잘 될 것 같습니다. – Jeremy

2

당신은 단순히도 입력 할 수 있도록, 한 단계 더 시몬의 바이올린 예를 촬영 :

여기에 내가 이런 식으로 명확히 수도 있겠죠 바이올린 http://jsfiddle.net/LBzUt/33/