【计算机图形学】期末复习part1:直线与曲线的绘制

简介: 【计算机图形学】期末复习part1:直线与曲线的绘制

写在前面

由于文章中公式与代码较多,所以字符数较多,超过了上限。需要拆成多个part。共3个part:直线与曲线绘制、图形的变换、杂项。

1.生成直线的Bresenham算法


image.png

image.png

deltax=x2-x1;
deltay=y2-y1;
k=deltay/deltax;
e=k-0.5;
x=x1;
y=y1;
for (;x<=x2;x++){
  putpixel(x,y,pixelcolor);
  if (e<0)
    e=e+k;
  else{
    y=y+1;
    e=e+k-1;
  }
}

image.png

deltax=x2-x1;
deltay=y2-y1;
k=deltax/deltay;
e=k-0.5;
x=x1;
y=y1;
for (;y<=y2;y++){
  putpixel(x,y,pixelcolor);
  if (e<0)
    e=e+k;
  else{
    x=x+1;
    e=e+k-1;
  }
}

image.png

deltax=x2-x1;
deltay=y2-y1;
k=deltay/deltax;
e=k-0.5;
x=x1;
y=y1;
for (;x<=x2;x++){
  putpixel(x,y,pixelcolor);
  if (e<0)
    e=e+k;
  else{
    y=y-1;
    e=e+k-1;
  }
}

2.三次参数样条曲线

(前置科技:Hermite曲线)

结论

image.png


推理

三次曲线的代数形式是:

image.png


image.png

image.png

x方向上的分量可表示为

image.png

image.png

image.png

三次样条参数曲线

image.png


image.png

image.png

image.png



3.B样条曲线

二次B样条曲线


image.png

三次B样条曲线

三次B样条曲线的矩阵形式如下:

image.png


端点特性

image.png

绘制技巧

可用角点重叠角点共线的技巧。角点重叠指控制点重合,角点共线指控制点位于同一条直线。

要在某处使得曲线段与特征多边形相切:二重角点。

要在某处使得曲线形状出现尖点或通过某一个角点:三重角点。

在某处使得曲线出现拐点:三角点共线。

使得曲线形状中切入一段直线:四角点共线。

代码

//参数:6个控制点。
for (int i = 0; i < 3; i++) {
    //以P[i],P[i+1],P[i+2],P[i+3]为控制点推出系数
  double ax = -(p[i].x - 3 * p[i + 1].x + 3 * p[i + 2].x - p[i + 3].x) / 6;
  double ay = -(p[i].y - 3 * p[i + 1].y + 3 * p[i + 2].y - p[i + 3].y) / 6;
  double bx = (p[i].x - 2 * p[i + 1].x + p[i + 2].x) / 2;
  double by = (p[i].y - 2 * p[i + 1].y + p[i + 2].y) / 2;
  double cx = -(p[i].x - p[i + 2].x) / 2;
  double cy = -(p[i].y - p[i + 2].y) / 2;
  double dx = (p[i].x + 4 * p[i + 1].x + p[i + 2].x) / 6;
  double dy = (p[i].y + 4 * p[i + 1].y + p[i + 2].y) / 6;
    //以abcd的系数,以t为参数,绘制该段曲线
  for (double t = 0; t <= 1; t = t + 0.001) {
    int xt = ax * t * t * t + bx * t * t + cx * t + dx;
    int yt = ay * t * t * t + by * t * t + cy * t + dy;
    pDC->MoveTo(xt, yt);
    pDC->LineTo(xt, yt);
  }
}


目录
相关文章
|
7月前
|
Serverless C语言 C++
【数学建模】利用C语言来实现 太阳赤纬 太阳高度角 太阳方位角 计算和求解分析 树木树冠阴影面积与种植间距的编程计算分析研究
【数学建模】利用C语言来实现 太阳赤纬 太阳高度角 太阳方位角 计算和求解分析 树木树冠阴影面积与种植间距的编程计算分析研究
138 1
|
10天前
|
算法 测试技术 C#
【数学】【计算几何】1453. 圆形靶内的最大飞镖数量
【数学】【计算几何】1453. 圆形靶内的最大飞镖数量
|
10天前
|
图形学
【计算机图形学】期末复习Bezier曲线与曲面篇
【计算机图形学】期末复习Bezier曲线与曲面篇
|
7月前
跟着 Cell 学作图 | 柱状图+误差棒+蜂群图
跟着 Cell 学作图 | 柱状图+误差棒+蜂群图
99 0
|
7月前
|
数据可视化
好玩的DEM制图:等高线地形图入门与进阶
好玩的DEM制图:等高线地形图入门与进阶
58 0
|
9月前
|
机器学习/深度学习 索引
一行代码绘制高分SCI限制立方图
Restricted cubic splines (RCS)是一种基于样条函数的非参数化模型,它可以可靠地拟合非线性关系,可以自适应地调整分割结点。在统计学和机器学习领域,RCS通常用来对连续型自变量进行建模,并在解释自变量与响应变量的关系时更加准确和精细。之前有写一篇RCS的文章,但是还是有一定的难度,经过一段时间的研究,发现rcssci包更为简便好用。
209 0
|
算法
秒懂算法 | 计算几何:圆
计算几何的基础是点积和叉积,它们定义了向量的大小和方向的关系,是其他计算几何概念和算法的出发点。在点积和叉积的基础上,本篇重点介绍圆覆盖。 计算几何题目的代码大多繁琐冗长,因此掌握模板代码是学习计算几何的关键。本篇精心组织了经典的几何模板
18030 1
秒懂算法 | 计算几何:圆
|
图形学
【计算机图形学】期末复习part2:二维与三维图形变换
【计算机图形学】期末复习part2:二维与三维图形变换
124 0
【计算机图形学】期末复习part2:二维与三维图形变换
|
数据采集 计算机视觉 Python
【菜菜的CV进阶之路-数据预处理-基础】Python轮廓检测、找出轮廓中心点、绘制最小矩形框并裁剪
【菜菜的CV进阶之路-数据预处理-基础】Python轮廓检测、找出轮廓中心点、绘制最小矩形框并裁剪
559 0
【菜菜的CV进阶之路-数据预处理-基础】Python轮廓检测、找出轮廓中心点、绘制最小矩形框并裁剪