다각형 이 돌출 다각형 인지 오목 다각형 인지 판단 하 다.

3746 단어 알고리즘
제목:
다각형 이 돌출 다각형 인지 오목 다각형 인지 판단 하 다.
입력:
여러 그룹의 테스트 데 이 터 를 포함 하 는 데 이 터 를 입력 하 십시오. 각 그룹의 데 이 터 는 2 줄 을 차지 합 니 다. 먼저 한 줄 은 정수 n 이 고 다각형 정점 의 개 수 를 표시 합 니 다. 그 다음 한 줄 은 2 입 니 다.×n 개의 정수, 시계 반대 순 서 를 나타 내 는 n 개의 정점 좌표 (xi, yi), n 이 0 일 때 입력 을 끝 냅 니 다.
출력:
모든 테스트 인 스 턴 스 에 대해 서 는 땅 덩이 의 모양 이 돌출 다각형 이 라면 'convex' 를 출력 하 십시오. 그렇지 않 으 면 출력 'concave' 를 출력 하 십시오. 모든 인 스 턴 스 의 출력 은 한 줄 을 차지 합 니 다.
해석:
벡터 의 수량 적 (내 적, 점 적) 벡터 의 벡터 적 (외 적, 포크 적) 은 오른손 규칙 에 부합된다.
벡터 적 은 위 벡터 로 그 방향 을 수직 으로 포크 적 을 하 는 두 개의 벡터 로 정의 하고 오른손 규칙 을 만족시킨다.
벡터 포크 의 기하학 적 의미
1. 벡터 의 포크 적 모 는 이 두 벡터 가 둘 러 싼 평행 사각형 의 면적 을 나타 낸다.
벡터 P = (x1, y1), Q = (x2, y2),
벡터 포크 적 정 의 를 이유 로 (0, 0), p1, p2 와 p1 + p2 로 구 성 된 평행 사각형 의 기호 면적, 즉 P×Q = x1*y2 – x2*y1 그 결 과 는 가짜 벡터 이다.
분명히 성질 이 있다 P× Q = – ( Q × P) 와 P× ( – Q ) = – ( P × Q )。
2. 포크 의 매우 중요 한 특징 은 그의 기 호 를 통 해 두 벡터 간 의 시계 반대 관 계 를 판단 할 수 있다 는 것 이다.
  • 약 P× Q > 0 이면 P 는 Q 의 시계 방향
  • 약 P× Q < 0 이면 P 는 Q 의 시계 반대 방향
  • 약 P× Q = 0 이면 P 와 Q 가 공선 이지 만 같은 방향 일 수도 있 고 반대 방향 일 수도 있 으 며 포크 를 하 는 두 개의 벡터 가 모두 수직 이기 때문에 포크 의 벡터 는 바로 이 두 개의 벡터 로 평면 을 구성 하 는 법 적 벡터 이다.
  • 3. 벡터 포크 가 0 벡터 라면 이 두 벡터 는 평행 관계 이다.
    4. 벡터 포크 는 이 두 벡터 평면 의 법 적 벡터 이기 때문에 만약 에 두 벡터 가 평행 으로 하나의 평면 을 형성 하지 못 하면 그 대응 도 평면 법 벡터 가 없다. 그래서 두 벡터 가 평행 할 때 그 벡터 포크 는 0 이다.
    코드:
    #include  
    #include  
    
    struct xy  
    {  
        int x;  
        int y;  
    }d[1000];  
    
    int g(int a,int b,int c)  
    {  
        int t;  
        //  :s=(x1-x3)*(y2-y3)-(x2-x3)*(y1-y3)  
        // s>0 ,p1,p2,p3         
        // s<0 ,p1,p2,p3         
        t=(d[a].x-d[c].x)*(d[b].y-d[c].y)-(d[b].x-d[c].x)*(d[a].y-d[c].y);  
        return t;  
    }  
    
    int main()  
    {  
        int i,t,n;  
        while(scanf("%d",&n),n)  
        {  
            for(i=0;iscanf("%d %d",&d[i].x,&d[i].y);  
            }  
            for(i=0;i// n    i=n-1   n+1,n+2       ,                           
                t=g(i%n,(i+1)%n,(i+2)%n);  
                if(t<0)
                    break;  
            }  
                if(t>=0)  
                    printf("convex
    "
    ); else printf("concave
    "
    ); } return 0; }

    이 글 은 다음 에서 전 재 됩 니 다:https://www.cnblogs.com/wushuaiyi/archive/2013/12/05/3458659.html

    좋은 웹페이지 즐겨찾기