Android 는 다각형 영역 에 있 지 않 은 점 을 어떻게 판단 합 니까?
그리고 이 점 이 특정한 삼각형 에 있 는 지 아 닌 지 를 판단 한다.만약 에 있다 면 이 다각형 에 있 을 것 이다.그 문 제 는 다음 에 이 점 이 삼각형 에 있 는 지 아 닌 지 를 판단 하 는 것 으로 바 뀌 었 다.이 점 D 와 삼각형 의 세 점 A,B,C 가 조 합 된 삼각형 a,b,c 의 면적 의 합 이 이 삼각형 의 면적 과 같다 면 이 점 이 삼각형 에 있다 는 것 을 설명 한다.그림 과 같다.
코드 는 다음 과 같 습 니 다:
public boolean isInTriangle(Point A, Point B, Point C, Point P) {
double ABC = triAngleArea(A, B, C);
double ABp = triAngleArea(A, B, P);
double ACp = triAngleArea(A, C, P);
double BCp = triAngleArea(B, C, P);
if ((int) ABC == (int) (ABp + ACp + BCp)) {// , , (25714.25390625、25714.255859375)
return true;
} else {
return false;
}
}
private double triAngleArea(Point A, Point B, Point C) {//
double result = Math.abs((A.getX() * B.getY() + B.getX() * C.getY()
+ C.getX() * A.getY() - B.getX() * A.getY() - C.getX()
* B.getY() - A.getX() * C.getY()) / 2.0D);
return result;
}
모든 것 이 그렇게 합 리 적 으로 보이 고 코드 도 다 썼 으 며 테스트 도 다 했 으 니 문제 가 없습니다!그러나 마지막 으로 나 는 한 가지 문 제 를 소홀히 한 것 을 발견 했다.또 하나의 다각형 의 상황 은 고려 하지 못 했다.그것 이 바로 바나나 형의 다각형 이다.그림 과 같다.이 문제 가 나 오 자마자 나 는 바로 동 그 라 미 를 쳤 다.이것 은 어떻게 해 야 하 는 지,마지막 으로 인터넷 에서 해결 방법 을 찾 았 다.그것 은 바로 이 점 을 따라 평행선 을 만 드 는 것 이다.만약 에 이 점 의 한쪽 과 다각형 이 교차 하 는 점 이 홀수 라면 이 점 이 이 다각형 에 있다 는 것 을 설명 한다.그림 과 같다.
코드 는 다음 과 같 습 니 다:
/**
* : : : , !
*
* @param point
*
* @param APoints
* ( )
* @return
*/
public boolean PtInPolygon(Point point, List<Point> APoints) {
int nCross = 0;
for (int i = 0; i < APoints.size(); i++) {
Point p1 = APoints.get(i);
Point p2 = APoints.get((i + 1) % APoints.size());
// y=p.y p1p2
if (p1.getY() == p2.getY()) // p1p2 y=p0.y
continue;
if (point.getY() < Math.min(p1.getY(), p2.getY())) // p1p2
continue;
if (point.getY() >= Math.max(p1.getY(), p2.getY())) // p1p2
continue;
// X
// --------------------------------------------------------------
double x = (double) (point.getY() - p1.getY())
* (double) (p2.getX() - p1.getX())
/ (double) (p2.getY() - p1.getY()) + p1.getX();
if (x > point.getX())
nCross++; //
}
// , ---
return (nCross % 2 == 1);
}
프로젝트 다운로드:한 점 이 다각형 에 있 는 지 여부이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.