videos ubicados puntos profe plano julioprofe fisica entre encontrar ejemplos distancia demostracion como calcular iphone cocoa-touch

iphone - ubicados - ¿Cómo encontrar la distancia entre dos puntos CG?



encontrar la distancia entre puntos (9)

Con Swift 4, puede elegir uno de los 5 siguientes códigos de Playground para obtener la distancia entre dos instancias de CGPoint .

1. Usando la función Darwin 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. Usando el 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. Usando el CGFloat squareRoot() y la función Core Graphics pow(_:_:)

import 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. Usando la función de Core Graphics hypot(_:_:)

import 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. Usando Core Graphics hypot(_:_:) function y CGFloat distance(to:) method

import 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

Cuando hacemos multitouch con dos dedos en un UIScrollView, obtenemos dos puntos CG. Quiero encontrar la distancia entre ellos. Luego, cuando vuelva a hacer el pellizco (dentro o fuera), entonces obtendremos nuevamente dos puntos. Luego, después de encontrar nuevamente la distancia entre estos dos puntos, quiero decidir si pellizqué o no. Si me pellizqué, seguramente la nueva distancia será menor y viceversa.

¿Pero no sé cómo encontrar una medida precisa de la distancia entre 2 puntos para hacer una comparación? ¿Alguien tiene idea sobre esto?


Creo que usar multiply será más rápido que la función pow que algunos prefieren. En Swift:

public func distanceBetween(p1 : CGPoint, p2 : CGPoint) -> CGFloat { let dx : CGFloat = p1.x - p2.x let dy : CGFloat = p1.y - p2.y return sqrt(dx * dx + dy * dy) }

Sugerencia para comparar distancias

Sin embargo, un consejo: si está comparando distancias (por ejemplo, para encontrar la más pequeña o la más grande), entonces es mejor omitir el bit sqrt (que es lento) y simplemente comparar los cuadrados de distancias.


Escribí esto, lo uso mucho:

- (float) distanceBetween : (CGPoint) p1 and: (CGPoint) p2 { return sqrt(pow(p2.x-p1.x,2)+pow(p2.y-p1.y,2)); }

Llamar así:

float distanceMoved = [self distanceBetween touchStart and: touchEnd];

Normalmente uso cocos2d, pero todavía uso mi propia función para algunas cosas porque cuando estaba aprendiendo escribí muchas de mis funciones para cosas simples en lugar de buscar las funciones de orden superior "oficiales", y además no soy un gran fan de las funciones (vars, vars), prefiero [self functions vars y: vars]


Puede usar la función hypotf() o hypotf() para calcular la hipotenusa. Dado dos puntos p1 y p2 :

CGFloat distance = hypotf(p1.x - p2.x, p1.y - p2.y);

Y eso es.


Si desea encontrar el valor de distancia absoluta entre dos puntos, puede usar (para Cocos2d):

float distance = abs(ccpDistance(point1, point2));


Para usuarios rápidos

extension CGPoint { func distance(toPoint p:CGPoint) -> CGFloat { return sqrt(pow(x - p.x, 2) + pow(y - p.y, 2)) } }


Distancia entre p1 y p2 :

CGFloat xDist = (p2.x - p1.x); CGFloat yDist = (p2.y - p1.y); CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));

Swift 3:

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))) }

Antecedentes: teorema de Pitágoras

Editar: si solo necesita calcular si la distancia entre los puntos aumenta o disminuye, puede omitir el sqrt (), que lo hará un poco más rápido.


#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))

Y así es como lo usas:

CGPoint offset = rw_pointOffset(view1.center, view2.center); float distance = rw_pointDistance(view1.center, view2.center);


-(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)); }

Si está usando cocos2d

float distance = ccpDistance(point1, point2);