我有以下结构的定义:交叉数据结构
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; }
};
我的任务是写一个方法isPointInside(常量VEC & A,const的多边形& P)确定,如果一个给定的点A是内部的给定多边形P还是不是。
我实现
首先我的方法创建一个线段L从A开始,并在B点结束,那绝对是多边形之外。其次,它计算与线段L相交的多边形的所有边界。如果多边形P的计数边界是奇数,则给定点A恰好在给定多边形P内。
我用找出来了,如果两个线段相交做具有下面的函数声明的方法:
bool intersect(const line&, const line&);
多边形是定义该多边形的所有拐角点的阵列。具有n个角点
P = (P1, P2, ..., PN)
多边形P具有如下边界:
(P1, P2), (P2, P3), ..., (P(N-1), PN), (PN, P1)
遍历所有边界,我想用一个“常量lineSegment'指针polyBorder,即指着里面polygon.points数组(vec类型),并且在每次迭代之后都会通过sizeof(vec)增加。
在每次迭代(除了第n次迭代),我想打电话给
intersect(L, *polyBorder);
问题
是否与任何C/C++编译器本次迭代的工作,或者做一些编译器存储的其他数据对于vec和lineSegment,这种方法不适用于这些?
含义,是指针的用法,在c/C++标准中明确定义,还是特定于此实现?
//编辑
有些为例码(未测试,可能不工作!):
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')和迭代容器的算法,而不是原始指针和手动分配/解除分配 –
如果你的直线穿过一个或多个顶点的多边形。只是在说'。 –
不要描述代码,显示它。 –