교차 I가 다음 구조체 정의 :데이터 구조
struct vec { // 2-dim vector
long d[2];
};
struct lineSegment { // a 2D-LineSegment with start/end points A, B
vec A, B;
};
struct polygon { // a 2D-Polygon
vec *points;
polygon(unsigned int points) {
vec = new vec[points];
}
polygon() {}
~polygon() { delete[] vec; }
};
내 작업은 특정 시점 A가 내부에 있는지를 결정한다 (& A, CONST 다각형 & P VEC CONST) 방법 isPointInside 물품이다
주어진 다각형 P 또는 아닙니다.
내 구현
먼저 내 방법은 선분의 L (A)에서 시작하여 점 B에서 종료를 생성, 즉 다각형의 외부 확실히이다. 둘째, 선분 L과 교차하는 모든 다각형의 경계를 계산합니다. 주어진 점 A는 폴리곤 P의 계수 된 경계가 홀수 인 경우 지정된 폴리곤 P의 내부에 있습니다.
나는 두 선분이 교차은 다음 함수 선언을가한다면, 찾아 사용하는 방법은 :
bool intersect(const line&, const line&);
다각형은 다각형을 정의하는 모든 코너 포인트의 배열입니다.
(P1, P2), (P2, P3), ..., (P(N-1), PN), (PN, P1)
는 그 내부 가리키는하는 'const를 lineSegment' 포인터 polyBorder을 사용하고자하는 모든 국경을 반복하려면 : n 개의 모서리 점
P = (P1, P2, ..., PN)
을 가진 다각형 P는 다음과 국경을 가지고 polygon.points 배열 (vec 유형)이며 모든 반복 후에 sizeof (vec)만큼 증가합니다. (n 번째 반복 제외) 각각의 반복에서
나는intersect(L, *polyBorder);
어떤 C/C++ 컴파일러이 반복 작업을 수행하는 질문, 전화 또는 일부 컴파일러 저장소 추가 데이터를하고 싶지 vec 및 lineSegment의 경우 이러한 접근 방식이 작동하지 않습니다.
의미는 c/C++ 표준에서 잘 정의 된이 포인터의 용도입니까, 아니면이 구현과 관련이 있습니까?
// 편집
일부 exemple 코드 (안 테스트 아마 작동하지 않습니다!) :
polygon test(4);
// initialise the points in test.points
const lineSegment *polyBorder = reinterpret_cast<lineSegment*>((const void*)test.points); // first line
// do something
polyBorder = reinterpret_cast<const lineSegment*>(((const void*)polyBorder)+sizeof(vec)); // second line
// do something
polyBorder = reinterpret_cast<const lineSegment*>(((const void*)polyBorder)+sizeof(vec)); // third line
// do something
원시 포인터와 수동 할당/할당 해제 대신 표준 STL 컨테이너 (예 :'std :: vector')와 컨테이너를 반복하는 알고리즘을 사용하는 것이 좋습니다 –
이 메서드는 줄이 하나 이상의 꼭지점을 통과하면 분해됩니다 다각형의 그냥 선생님. –
코드를 설명하지 말고 보여주십시오. –