2014-02-18 1 views
1

UIBezierPath 선이 있는데이 선의 시작 부분에서이 거리에있는 점의 좌표를 얻고 싶습니다. 거리에 따라 나는 그 선을 따라 거리를 의미한다.UIBezierPath에서 지정된 거리의 점 좌표

다음 그림에서 나는 x와 y를 찾고 있습니다.

enter image description here

완벽한 솔루션은 인수로 거리를 취하는 방법하고 좌표를 반환.

CGPoint myPoint = [myLine pointAtdistance : 53.21]

뭔가 비슷한 존재합니까? 나는 그것이 일반적인 문제 일 것이라고 생각했지만, 웹상에서 어떤 관련 정보도 찾을 수 없었다. 어쩌면 내가 잘못된 것을 찾고 있을까?

감사합니다.

+0

, 당신은 실제로 – mathematician1975

+0

나는 선을 따라 시작 지점으로부터의 거리를 의미하는 고유하지 않을 수 있습니다 추구 발생합니다. 내 질문을 편집합니다 :) – Legisey

+0

경로에 곡선 세그먼트가 있습니까? 일반적인 사용법은 무엇입니까? 하나의 길과 많은 거리 요청입니까? – MBo

답변

3

경로가 더 곡선 세그먼트 만 선형 사람들을 포함하지 않으며, 거리 요청을 많이 한 경로가 있다면, 당신은 몇 가지 전처리 (1 항목)를 사용할 수 있습니다 :

1. Calculate length of every segment, and cumulative path length till this segment's end 

2. With distance request, find proper segment by binary search 
    (or linear search, if the number of segments is small) 
3. Find parameter (0..1) of relative position of point in this segment 
4. Calculate coordinates as linear combination of segment end points. 

간단한 예 : enter image description here를 당신은 시작 지점으로부터의 거리를 의미하는 경우

Points (0,0), (1,0), (1,2), (4,-2), (6,-2) 
Lengths [1, 2, 5, 2] 
Path cumul. lengths: [0, 1, 3, 8, 10] 

Distance req.: 5 
Binary search finds 3rd segment (5 is between 3 and 8) 
3*(1-t)+8*t=5 (equation to find a parameter) 
t = 0.4 
X = P[2].X * (1-t) + P[3].X * t 
Y = P[2].Y * (1-t) + P[3].Y * t 
use (1,2) and (4,-2) coordinates 
(X,Y)= (2.2, 0.4) 
+0

답변 해 주셔서 감사합니다. 그것을 구현하고 잘 작동합니다. 관심있는 사람은 포인트가 P2와 P3 사이에 있으면 다음과 같습니다. t = (dist.req - P2.dist)/(P3.dist - P2.dist) 3) = 0.4 – Legisey

+0

예, 맞습니다. (P3.dist - P2.dist) = 길이 2, 계산할 필요가 없습니다 – MBo

+0

답변에 작은 유형이 있습니다 :'Y = P [2] .Y * (1- t) + P [3] .X * t'는'Y = P [2] .Y * (1-t) + P [3] .Y * t'이어야합니다. 대답! – Georg