さて、あなたが参照するものも含めて、完全なコードはどこですか
CGPoint p2; //[1]
CGPoint p1;
//Assign the coord of p2 and p1...
//End Assign...
CGFloat xDist = (p2.x - p1.x); //[2]
CGFloat yDist = (p2.y - p1.y); //[3]
CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist)); //[4]
距離は可変距離です。
ここで何が起こっているのですか?
CGPointを距離にすることはできません。距離にはxとyのコンポーネントはありません。たった1つの数字です。
CGPointが測定単位であると考える場合(たとえば、フィートは測定単位です)、そうではありません。
私はこれを手作業で10,000回実行しなければならなかったので、そのための関数を作成し、それを個人用ライブラリーに入れて、常に新しいプログラムの最初にダンプするので、大砲ではないことを忘れました。
- (float)distanceBetween:(CGPoint)p1 and:(CGPoint)p2
{
return sqrt(pow(p2.x-p1.x,2)+pow(p2.y-p1.y,2));
}
したがって、次のように呼び出します(指をどれだけ動かしたかを知りたいとします)。
float moveDistance = [self distanceBetween:touchStart and:touchEnd];
これは、移動機能や、スクロールメニューでのスポットチェックに役立ちます。
if([self distanceBetween:touchStart and:touchAt] > 20*scalePoints)
isItATap = FALSE;
TouchesBeganで「isItATap」をtrueに設定し、上記をtouchesMovedに配置すると、プレーヤーが指を動かしすぎて「タップ」できないため、プレーヤーが触れたオブジェクトを選択せずに、代わりにスクロールすることができます。周りのオブジェクト。
スケールについては、網膜ディスプレイがあるかどうか、およびデバイスのサイズに基づいている必要があります(通常の画面ではユーザーの指として5つの「ポイント」の物理的な距離であるため、網膜ディスプレイの場合は2で割ります)。各ポイントは4ピクセルであるため、Retinaディスプレイ画面では10ピクセルとして表示されます。これにより、プレーヤーがRetinaディスプレイをタップするのが非常に困難な状況に陥ります(これは一般的な見落としです) )
おそらく、距離ではなく、p1からp2へのベクトル(またはdifference)が必要なようです。
const CGPoint p1 = {10, 10};
const CGPoint p2 = {510, 310};
const CGPoint diff = {p2.x - p1.x, p2.y - p1.y} // == (CGPoint){500, 300}
_CGPoint p1, p2; // Having two points
CGFloat distance = hypotf((p1.x-p2.x), (p1.y-p2.y));
_
_p1
_と_p2
_の2つのポイントがある場合、height
とwidth
の違いを見つけるのは簡単です(例:ABS(p1.x - p2.x)
)。距離の真の表現を見つけるには、仮説が本当に必要です(以下のH
)。
_ p1
|\
| \
| \ H
| \
| \
|_ _ _\
p2
_
ありがたいことに、このための組み込みマクロがあります:hypotf
(またはhypot
の場合はdoubles
):
_// Returns the hypothenuse (the distance between p1 & p2)
CGFloat dist = hypotf((p1.x-p2.x), (p1.y-p2.y));
_
(元の 参照 )
Swiftでは、CGPointに拡張機能を追加できます。
extension CGPoint {
func distance(to point: CGPoint) -> CGFloat {
return sqrt(pow((point.x - x), 2) + pow((point.y - y), 2))
}
}
次のように使用します。
let distance = p1.distance(to: p2)
これだけ...
float distance = ccpLength(ccpSub(p1,p2));
ここで、p1とp2はCGPointのオブジェクトです
Swift 4、Swift 3ソリューション
extension CGPoint {
static func distanceBetween(point p1: CGPoint,
andPoint p2: CGPoint) -> CGFloat {
return sqrt(pow((p2.x - p1.x), 2) + pow((p2.y - p1.y), 2))
}
}