2017-02-16 5 views
1

これを行う簡単な方法はありますか?iOS - 行に沿って指定された距離でCGPointを取得するにはどうすればよいですか?

私はCGPointポイントA(10,10)と別のCGPointポイントB(15,8)を持っています。私はCGPointを得る必要があります。これは、AとBを結ぶ線と同じ線上にあり、点Aの前に特定の距離(例えば2)であります。

ベクトルベースの構造体を探しました。 CGVectorと呼ばれるものがありますが、ここではかなり役に立たないようです。

+1

私が思うこの質問はこれにsimliar次のとおりです。http: //stackoverflow.com/questions/2969181/moving-cgpoint-a-certain-distance-along-a-heading-iphoneあなたの問題を解決するのに役立ちます。 –

+2

@スニーク、これはこれと似ていると思います。投稿した質問http://math.stackexchange.com/questions/175896/finding-a-point-along-a-line-a-certain-distance-away -from-another-point – KrishnaCA

+0

@KrishnaCAああ、私もそれを見ました。 –

答えて

1

それは次のように行うことができます。

仮定:線の方向が頭からである:(ポイント2)テール:(ポイント1)

- (CGPoint)getPointFromLineConnecting:(CGPoint)point1 andPoint2:(CGPoint)point2 withDistanceFromPoint1:(CGFloat)dist { 

    // distance between connecting points 
    CGFloat distance = sqrtf(powf(point1.x-point2.x, 2) + powf(point1.y-point2.y, 2)); 

    // unit vector point: v = (x1-x0)i/distance + (y1-y0)j/distance 
    CGPoint unitVectorPoint = CGPointMake((point2.x - point1.x)/distance, (point2.y - point1.y)/distance); 

    // resultant point at a distance d from p1 
    CGPoint resultPoint = CGPointMake((point1.x+dist*unitVectorPoint.x), (point1.y+dist*unitVectorPoint.y)); 

    return resultPoint; 
} 
+1

@スニーク、再チェックして問題を解決しました。今はうまくいくはずだと私は信じている。 – KrishnaCA

+0

かなり近い。上のコードスニペットの唯一の仮定は、その昇順の行です。しかし、私はその部分を理解することができます。何か良いことが示唆されない限り、これを答えとしてマークします。 – OutOnAWeekend

+0

@AnandKumar、私は編集された答えがすべての条件を満たすと信じています – KrishnaCA

関連する問題