交叉数据结构
intersecting data structure
我有以下结构体定义:
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(const vec & a, const polygon & p)来确定给定的点a是否在给定的多边形p内。
实现
首先,我的方法创建了一个线段L,从a开始,结束于点B,这肯定是在多边形的外面。其次,计算与线段l相交的多边形的所有边界,如果计算的多边形P的边界是奇数,则给定点A正好在给定多边形P内。
我用来找出的方法,如果两个线段相交有以下函数声明:
bool intersect(const line&, const line&);
多边形是定义该多边形的所有角点的数组。具有n个角点的多边形P
P = (P1, P2, ..., PN)
有以下边框:
(P1, P2), (P2, P3), ..., (P(N-1), PN), (PN, P1)
要遍历所有边界,我想使用'const lineSegment'指针polyBorder,这是指向多边形内部。Points数组(类型为vec),每次迭代后将增加sizeof(vec)。
在每次迭代中(除了第n次迭代),我想调用
intersect(L, *polyBorder);
这种迭代是否适用于任何c/c++编译器,或者是否有一些编译器为vec和linesegement存储额外的数据,因此这种方法不适用于这些?
的意思是,指针的这种用法,在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
我不太明白你的问题。您是否在问sizeof(vec)
是否包含编译器包含的附加数据?是的,它有。但是,如果指针类型为char*
,则只能增加sizeof(vec)
。当指针为type*
类型时,对该指针的算术操作将其视为指向type
个元素的数组,并对整个元素进行操作。所以你不需要使用sizeof
。
给定一个数组:
T* array[N]
和结构类型:
struct S {
T A, B;
};
可以使用S*
指针访问数组中的一对顺序元素吗?
我认为这应该可行。但是,您不应该使用sizeof
技术来生成指针,您应该使用普通的指针算术,并直接在类型之间进行强制转换:
const lineSegment *polyBorder = (lineSegment*)test.points; // first line
polyBorder = (lineSegment*)(((vec*)polyBorder))+1); // second line
polyBorder = (lineSegment*)(((vec*)polyBorder))+1); // third line
这使得类型双关更加清晰,并且利用了C/c++进行指针运算的方式,在后台自动乘以元素的大小。
- 链表,反向函数,数据结构
- 如何使用set实现无序数据结构?
- 我们可以将数据永久保存为数据结构吗?
- C++中的可变长度数组/数据结构
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 通过 NIF 从C++返回自定义数据结构
- 编译器上的策略数据结构不起作用
- 尝试构建"lock-free"数据结构C++
- 设计将引用元素移动到开头的数据结构.C++
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何解析表示树状数据结构的字符串
- 我对数据结构、双向链表有一些问题
- googletest:测试太大的数据结构
- C++中deque数据结构的大O是什么?
- 我可以使用哪种数据结构来处理这种方式
- 将文本文件解析为树状数据结构
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 哪些存储了不完整类型的 STL 数据结构可以用作类成员?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 带参数的数据结构的全局声明