0
나는 사용자가 손가락으로 선을 그린 다음 그 선의 시작과 끝점을 사용하여 선의 각도를 계산할 수있는 iPad 응용 프로그램에서 작업 중입니다. iPad의 x/y 평면.경사와 각도의 관계 - CGAffineTransform
내 문제는 내가 그려진 선의 각도를 사용하여 현재 컨텍스트에 그려 넣을 이미지의 왜곡을 설정하려고합니다.
이 제의 drawRect 방법에서 relavent 코드 : 내 touchEnded있어서의 라인의 각도를 계산
CGSize size = CGSizeMake(1024, 768);
UIGraphicsBeginImageContext(size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGAffineTransform skewIt = CGAffineTransformMake(1, 0, skewValue, 1, 0, 0);
CGContextConcatCTM(ctx, skewIt);
CGContextDrawImage(UIGraphicsGetCurrentContext(),
CGRectMake(0,0,size.width, size.height),
theImage.CGImage);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
이 그려진 라인의 포인트 값 skewArray라는 배열에 저장되어
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
if (stepThree){
CGContextClearRect(skewContext, CGRectMake(0, 0, 1024, 668));
CGPoint pt1 = CGPointMake([[skewArray objectAtIndex:1]point3].x, [[skewArray objectAtIndex:1]point3].y);
CGPoint pt2 = CGPointMake([[skewArray objectAtIndex:[skewArray count]-1]point3].x, [[skewArray objectAtIndex:[skewArray count]-1]point3].y);
CGPoint pt3 = CGPointMake([[skewArray objectAtIndex:[skewArray count]-1]point3].x, [[skewArray objectAtIndex:1]point3].y);
CGFloat dis1 = sqrt((pow((pt2.x - pt1.x), 2) + pow((pt2.y - pt1.y), 2)));
CGFloat dis2 = sqrt((pow((pt3.x - pt2.x), 2) + pow((pt3.y - pt2.y), 2)));
CGFloat dis3 = sqrt((pow((pt1.x - pt3.x), 2) + pow((pt1.y - pt3.y), 2)));
angle = acos(((-1*pow(dis2, 2))+pow(dis1, 2)+pow(dis3, 2))/(2*dis1*dis3)) * 180/3.14;
//Do something with the angle to produce the appropriate skew value
[self setNeedsDisplay];
}
}
도움을 주셔서 감사합니다.
무엇이 당신의 질문입니까? 무슨 일 이니? 당신이 얻는 결과는 당신이 기대하는 것과는 다른 것입니까? 설명에 2 점이 나와 있지만 코드에서 3 점을 조작합니다. 포인트는 무엇을 나타 냅니까? – user1118321
세 점은 직선의 첫 번째 점, 직선의 마지막 점 및 직각 삼각형을 만들기위한 처음 두 점에서 파생 된 세 번째 점입니다. 세 점에서 나는 각면의 길이를 계산합니다. 그런 다음 측면의 길이를 사용하여 그려진 선의 각도를 계산합니다. 내 질문은도 (또는 라디안) 각도를 CGAffineTransform을 통해 컨텍스트를 비뚤어지게하는 데 사용할 수있는 값으로 변환하여 비뚤어진 각도가 사용자가 그린 선의 각도와 일치시키는 방법입니다. – kevinstueber
전단 매핑에 대한 [Wikipedia article] (http://en.wikipedia.org/wiki/Shear_mapping)을 확인하십시오. 기울기를 얻고 값을 왜곡 할 때 1.0/m을 사용하는 것이 나을 것 같습니다. – user1118321