本文整理汇总了C++中LinkList::Length方法的典型用法代码示例。如果您正苦于以下问题:C++ LinkList::Length方法的具体用法?C++ LinkList::Length怎么用?C++ LinkList::Length使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LinkList
的用法示例。
在下文中一共展示了LinkList::Length方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: paint
//define 3 指针 a p q;
void paint(vector<Evertex> v)//边类,存储一条边的两个端点
{
int i,j; //两个循环控制变量,在下面的向量循环和数组循环中将被多次调用。
Node<AELvertex>* a[screenheight]; //扫描线数组指针 AELvertex 有线段顶点的y值,和另一端点的x值,还有斜率的倒数
Node<AELvertex>* p; //p和q为扫描线类指针,是用来对指针链表进行插入和循环时用的
Node<AELvertex>* q;
int m;
bool tag = true;//填充颜色变化的控制变量
bool red_tag = true;
bool green_tag = true;
bool blue_tag = true;
for(i = 0; i < screenheight; i++) //将扫描线数组指针制空 水平scan
a[i] = NULL;
int k = 0; //下面要进行的是将多边形的边信息转化为扫描线信息
for(j = 0; j < v.size(); j++)//边的个数
{
p = new Node<AELvertex>; //new一个扫描线类空间,next为null
p->next = NULL;
if(v[j].y1 < v[j].y2) //两个if判断将线段两个端点中y坐标较大,将y值存入扫描线中,x坐标较小的,将x值存入扫描线中。
{
k = v[j].y1;//
p->data.x = v[j].x1;
p->data.y = v[j].y2;
p->data.dx = (v[j].x1 * 1.0 - v[j].x2 * 1.0) / (v[j].y1 * 1.0 - v[j].y2 * 1.0);
}
if(v[j].y1 > v[j].y2)
{
k = v[j].y2;
p->data.x = v[j].x2;
p->data.y = v[j].y1;
p->data.dx = (v[j].x1 * 1.0 - v[j].x2 * 1.0) / (v[j].y1 * 1.0 - v[j].y2 * 1.0);
} //两个y值相等说明线段平行于x轴,直接忽略
//将申请的空间连接到扫描线链表中
if(a[k] == NULL) //若为空,则直接将数组元素指针指向新空间
a[k] = p;
else //不为空,则通过尾插法将新空间插入链表尾部,
{
q = a[k];
while(q->next)
q = q->next;
q->next = p;
}
}
//填充部分
LinkList<AELvertex> AEL; //动态扫描线链表,动态扫描线类
for(i = 0; i < screenheight; i++) //动态扫描链表的结点添加
{
if(a[i] != NULL) //当元素不为空,即在此处有扫描线结点时
{
p = AEL.first; //尾插法将a[i]中的结点信息插入AEL中
while(p->next != NULL)
p = p->next;
p->next = a[i];
a[i] = NULL; //a[i]制空,防止野指针出现
vector<AELvertex> sort; //一个动态扫描线类向量,用来对AEL链表进行排序用的
p = AEL.first->next;
while(p) //将AEL链表中的所有扫描线点的信息给sort
{
sort.push_back(p->data);
p = p->next;
}
for(j = 0; j < sort.size(); j++) //对sort中的值排序,扫描线生成时需要所有点从小到大排好
{
for(k = 0; k < sort.size() - 1; k++)
{
if(sort[k].x > sort[k+1].x)
Sort(sort[k], sort[k+1]); //值交换,开头声明的Sort函数就是在这里用的
}
}
p = AEL.first->next;
j = 0;
while(p && j < sort.size()) //将排好序的结点在放回AEL链表中
{
Sort(p->data, sort[j]);
j++;
p = p->next;
}
sort.clear();
}
//扫描线生成,核心中的核心
p = AEL.first->next;
if(p) //判断AEL中是否有结点
{
for(j = 1; j <= AEL.Length(); j++)
{
k = AEL.Get(j).y; //取出每个结点的y的值,判断与当前扫描线的y坐标值即i比较,判断是否已经到线段顶部
if(k <= i) //这里我用了一个小技巧,没有按课上讲的通过端点是否为极值点来判断端点应该去还是留
//.........这里部分代码省略.........