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]; 
     } 
    } 

도움을 주셔서 감사합니다.

+0

무엇이 당신의 질문입니까? 무슨 일 이니? 당신이 얻는 결과는 당신이 기대하는 것과는 다른 것입니까? 설명에 2 점이 나와 있지만 코드에서 3 점을 조작합니다. 포인트는 무엇을 나타 냅니까? – user1118321

+0

세 점은 직선의 첫 번째 점, 직선의 마지막 점 및 직각 삼각형을 만들기위한 처음 두 점에서 파생 된 세 번째 점입니다. 세 점에서 나는 각면의 길이를 계산합니다. 그런 다음 측면의 길이를 사용하여 그려진 선의 각도를 계산합니다. 내 질문은도 (또는 라디안) 각도를 CGAffineTransform을 통해 컨텍스트를 비뚤어지게하는 데 사용할 수있는 값으로 변환하여 비뚤어진 각도가 사용자가 그린 선의 각도와 일치시키는 방법입니다. – kevinstueber

+0

전단 매핑에 대한 [Wikipedia article] (http://en.wikipedia.org/wiki/Shear_mapping)을 확인하십시오. 기울기를 얻고 값을 왜곡 할 때 1.0/m을 사용하는 것이 나을 것 같습니다. – user1118321

답변

1

전단 매핑시 Wikipedia article을 확인하십시오. 기울기를 얻고 값을 왜곡 할 때 1.0/m을 사용하는 것이 나을 것 같습니다.