Когда мы выполняем мультитач двумя пальцами в UIScrollView, мы получаем две точки компьютерной графики. Я хочу найти расстояние между ними. Затем, когда мы снова делаем щепотку (внутри или снаружи), то мы снова получаем два балла. Затем, снова найдя расстояние между этими двумя точками, я хочу решить, ущипнул я или нет. Если я зажал, то новое расстояние наверняка будет меньше, и наоборот.
Но не знаете, как найти точное измерение расстояния между двумя точками для сравнения? Кто-нибудь знает об этом?
iphone
cocoa-touch
Росомаха
источник
источник
CGPoint
s.Ответы:
Расстояние между
p1
иp2
:CGFloat xDist = (p2.x - p1.x); CGFloat yDist = (p2.y - p1.y); CGFloat distance = sqrt(xDist * xDist + yDist * yDist);
Добавьте функцию:
func distance(_ a: CGPoint, _ b: CGPoint) -> CGFloat { let xDist = a.x - b.x let yDist = a.y - b.y return CGFloat(sqrt(xDist * xDist + yDist * yDist)) }
Справочная информация: теорема Пифагора
Если вам нужно только рассчитать, увеличивается или уменьшается расстояние между точками, вы можете опустить sqrt (), что сделает его немного быстрее.
источник
Вы можете использовать функцию
hypot()
илиhypotf()
для вычисления гипотенузы. Учитывая два баллаp1
иp2
:CGFloat distance = hypotf(p1.x - p2.x, p1.y - p2.y);
Вот и все.
источник
let distance = hypotf(Float(p1.x - p2.x), Float(p1.y - p2.y))
let distance = hypot(p1.x - p2.x, p1.y - p2.y)
начиная с Swift 2.1Для быстрых пользователей
extension CGPoint { func distance(to point: CGPoint) -> CGFloat { return sqrt(pow(x - point.x, 2) + pow(y - point.y, 2)) } }
источник
В Swift 4 вы можете выбрать один из 5 следующих кодов игровой площадки, чтобы определить расстояние между двумя
CGPoint
экземплярами.1. Использование
sqrt(_:)
функции Дарвинаimport CoreGraphics func distance(from lhs: CGPoint, to rhs: CGPoint) -> CGFloat { let xDistance = lhs.x - rhs.x let yDistance = lhs.y - rhs.y return sqrt(xDistance * xDistance + yDistance * yDistance) } let point1 = CGPoint(x: -10, y: -100) let point2 = CGPoint(x: 30, y: 600) distance(from: point1, to: point2) // 701.141925718324
2. Использование
CGFloat
squareRoot()
методаimport CoreGraphics func distance(from lhs: CGPoint, to rhs: CGPoint) -> CGFloat { let xDistance = lhs.x - rhs.x let yDistance = lhs.y - rhs.y return (xDistance * xDistance + yDistance * yDistance).squareRoot() } let point1 = CGPoint(x: -10, y: -100) let point2 = CGPoint(x: 30, y: 600) distance(from: point1, to: point2) // 701.141925718324
3. Использование
CGFloat
squareRoot()
метода иpow(_:_:)
функции Core Graphicsimport CoreGraphics func distance(from lhs: CGPoint, to rhs: CGPoint) -> CGFloat { return (pow(lhs.x - rhs.x, 2) + pow(lhs.y - rhs.y, 2)).squareRoot() } let point1 = CGPoint(x: -10, y: -100) let point2 = CGPoint(x: 30, y: 600) distance(from: point1, to: point2) // 701.141925718324
4. Использование
hypot(_:_:)
функции Core Graphicsimport CoreGraphics func distance(from lhs: CGPoint, to rhs: CGPoint) -> CGFloat { return hypot(lhs.x - rhs.x, lhs.y - rhs.y) } let point1 = CGPoint(x: -10, y: -100) let point2 = CGPoint(x: 30, y: 600) distance(from: point1, to: point2) // 701.141925718324
5. Использование
hypot(_:_:)
функции иCGFloat
distance(to:)
метода Core Graphicsimport CoreGraphics func distance(from lhs: CGPoint, to rhs: CGPoint) -> CGFloat { return hypot(lhs.x.distance(to: rhs.x), lhs.y.distance(to: rhs.y)) } let point1 = CGPoint(x: -10, y: -100) let point2 = CGPoint(x: 30, y: 600) distance(from: point1, to: point2) // 701.141925718324
источник
-(float)distanceFrom:(CGPoint)point1 to:(CGPoint)point2 { CGFloat xDist = (point2.x - point1.x); CGFloat yDist = (point2.y - point1.y); return sqrt((xDist * xDist) + (yDist * yDist)); }
Если вы используете cocos2d
float distance = ccpDistance(point1, point2);
источник
Я написал это, много пользуюсь:
- (float) distanceBetween : (CGPoint) p1 and: (CGPoint) p2 { return sqrt(pow(p2.x-p1.x,2)+pow(p2.y-p1.y,2)); }
Звоните так:
float distanceMoved = [self distanceBetween touchStart and: touchEnd];
Обычно я использую cocos2d, но я все еще использую свою собственную функцию для некоторых вещей, потому что, когда я учился, я написал кучу собственных функций для простых вещей, вместо того, чтобы искать "официальные" функции высшего порядка, и, кроме того, я не большой поклонник функций (vars, vars), я предпочитаю [self functions vars and: vars]
источник
#define rw_pointOffset(point1, point2) CGPointMake(point2.x - point1.x, point2.y - point1.y) #define rw_pointDistance(point1, point2) sqrtf( powf(point2.x - point1.x, 2.0f) + powf(point2.y - point1.y, 2.0f))
И вот как вы его используете:
CGPoint offset = rw_pointOffset(view1.center, view2.center); float distance = rw_pointDistance(view1.center, view2.center);
источник
Если вы хотите найти значение абсолютного расстояния между двумя точками, вы можете использовать (для Cocos2d):
float distance = abs(ccpDistance(point1, point2));
источник