【计算机图形学】期末复习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);
  }
}


目录
相关文章
一看就会R语言绘制限制性立方样条(Restricted cubic spline,RCS)
最近在研究怎么处理论文数据,各种分析软件都有使用,比如:SPSS、Origin、stata16、medcalc和R语言都有些研究,其中除R语言外都是收费的。不过经过一番功夫,我这边有SPSS、stata16、Origin和medcalc的破解版,有需要的可以关注我的公众号,私聊我来获取,我将给你一个百度网盘下载地址。
692 0
|
Serverless C语言 C++
【数学建模】利用C语言来实现 太阳赤纬 太阳高度角 太阳方位角 计算和求解分析 树木树冠阴影面积与种植间距的编程计算分析研究
【数学建模】利用C语言来实现 太阳赤纬 太阳高度角 太阳方位角 计算和求解分析 树木树冠阴影面积与种植间距的编程计算分析研究
245 1
|
6月前
|
Python
优化哈里斯角例子
优化哈里斯角例子。
27 2
|
5月前
大学物理(上)-期末知识点结合习题复习(5)——刚体力学-转动惯量、力矩、线密度 面密度 体密度、平行轴定理和垂直轴定理、角动量定理和角动量守恒定律
大学物理(上)-期末知识点结合习题复习(5)——刚体力学-转动惯量、力矩、线密度 面密度 体密度、平行轴定理和垂直轴定理、角动量定理和角动量守恒定律
36 0
|
6月前
|
算法 测试技术 C#
【数学】【计算几何】1453. 圆形靶内的最大飞镖数量
【数学】【计算几何】1453. 圆形靶内的最大飞镖数量
|
6月前
|
图形学
【计算机图形学】期末复习Bezier曲线与曲面篇
【计算机图形学】期末复习Bezier曲线与曲面篇
跟着 Cell 学作图 | 柱状图+误差棒+蜂群图
跟着 Cell 学作图 | 柱状图+误差棒+蜂群图
194 0
|
数据可视化
好玩的DEM制图:等高线地形图入门与进阶
好玩的DEM制图:等高线地形图入门与进阶
89 0
|
机器学习/深度学习 索引
一行代码绘制高分SCI限制立方图
Restricted cubic splines (RCS)是一种基于样条函数的非参数化模型,它可以可靠地拟合非线性关系,可以自适应地调整分割结点。在统计学和机器学习领域,RCS通常用来对连续型自变量进行建模,并在解释自变量与响应变量的关系时更加准确和精细。之前有写一篇RCS的文章,但是还是有一定的难度,经过一段时间的研究,发现rcssci包更为简便好用。
336 0
|
数据可视化 数据挖掘 Python
跟着Nature学作图:R语言ggplot2三角热图按照指定的角度旋转
跟着Nature学作图:R语言ggplot2三角热图按照指定的角度旋转