programing

두 CG 지점 사이의 거리를 찾는 방법은 무엇입니까?

goodcopy 2023. 9. 5. 21:19
반응형

두 CG 지점 사이의 거리를 찾는 방법은 무엇입니까?

UIScrollView에서 손가락 두 개로 멀티터치를 하면 CG 포인트 두 개가 나옵니다.나는 그들 사이의 거리를 찾고 싶습니다.그런 다음 다시 핀치를 할 때(안쪽이든 바깥쪽이든), 다시 2점을 얻을 것입니다.그런 다음 이 두 점 사이의 거리를 다시 찾은 후에, 저는 제가 꼬집어 넣었는지 아니면 빼냈는지 결정하고 싶습니다.만약 제가 끼어들었다면, 확실히 새로운 거리는 더 적을 것이고 그 반대일 것입니다.

하지만 비교를 위해 두 지점 사이의 거리를 정확하게 측정하는 방법을 모르십니까?이 일에 대해 알고 있는 사람이십니까?

사용할 수 있습니다.hypot()또는hypotf()빗변을 계산하는 함수.2점이 주어집니다.p1그리고.p2:

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

그리고 이것이 마지막입니다.

사이의 거리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()를 생략하면 조금 더 빨라집니다.

빠른 사용자를 위한

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

Swift 4를 사용하면 다음 5개의 Playground 코드 중 하나를 선택하여 두 코드 사이의 거리를 확보할 수 있습니다.CGPoint예를 들면


다윈 사용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

사용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

사용CGFloat squareRoot()메소드 및 코어 그래픽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

코어 그래픽 사용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

코어 그래픽 사용hypot(_:_:)기능 및CGFloat distance(to:)방법

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
-(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를 사용하지만, 여전히 몇 가지를 위해 제 자신의 함수를 사용합니다. 왜냐하면 제가 배울 때 "공식적인" 고차 함수를 검색하는 것보다 간단한 것을 위해 제 자신의 함수를 많이 썼기 때문입니다. 그리고 추가적으로 저는 함수(바, 바)의 열렬한 팬이 아니기 때문입니다. [자체 함수 변수 및: 바]

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

언급URL : https://stackoverflow.com/questions/1906511/how-to-find-the-distance-between-two-cg-points

반응형