首页 > 编程语言 >直线渲染算法

直线渲染算法

时间:2022-12-23 20:55:52浏览次数:62  
标签:直线 y2 渲染 double x2 算法 y1 x1

概述

目前直线渲染算法主要分为五种:

  • 朴素算法
  • DDA(Digital Differential Analyzer)算法
  • Bresenham算法
  • Xiaolin Wu算法
  • Gupta-Sproull算法

朴素算法

直接根据微分方程计算,源代码如下:

//plot (x1,y1) to (x2,y2)
//x1,y1,x2,y2 是整型

double dx=x2-x1;     //由于要做乘除法,所以使用double型
double dy=y2-y1;
double k=dy/dx;
for(int x=x1;x<=x2;x++)   //逐像素
{
   y=k*x+x1;                
   drawPixel(x,round(y))
}

如下图所示:直线渲染像素点为蓝色。当k绝对值小于1时(左图),较为正常,但当k的绝对值大于1时(右图),会造成像素点过于稀疏(左侧)。此时,交换x,y即可(右侧)。

Reference

  1. Line drawing algorithm Wiki
  2. WhatWhenHow

标签:直线,y2,渲染,double,x2,算法,y1,x1
From: https://www.cnblogs.com/naiveDevil/p/16999809.html

相关文章

  • 算法篇--二分算法
    1.基本介绍二分思想一般用于查找,见其名知其意,这是一个半半开的算法。第一次接触二分思想的时候是高中的数学学习中,给定一个方程f(x)=0的根所在的区间,可以用根存在定理......
  • 算法篇--递归
    递归一、算法思想:1、定义:在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。简单来说,递归表现为函数调用函数本身。2、特点:递归有两个显著的......
  • 教算法用awk比PASCAL强
    请看KMP代码:functionKMP(s,m,p,n){if(n==0||m==0)return;split(s,str,"");split(p,pattern,"");#https://www.tutorialspoint.com/awk/awk_......
  • 基于QT的TCP传输拆包和组包算法
    什么是TCP传输的粘包,以及为什么要拆包组包就不仔细叙述了,简而言之就是TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,数据的顺序和内容都是可靠的,但因为是机遇字......
  • 如何对算法进行测试?
    1、正确性;一个好的算法必需能够正确的执行要求的功能和性能要求。这要求我们对一个算法进行功能测试和性能测试。2、可用性;一个好的算法能够很方便的使用。测试算......
  • gpu 渲染 surface与canvas
    Android应用程序UI硬件加速渲染技术简要介绍和学习计划罗升阳    Android系统的流畅性一直被拿来与iOS比较,并且认为不如后者。这一方面与Android设备硬件质量参差......
  • x264改变输出分辨率的算法
    在某些应用场景下,x264的输入视频分辨率与接收端输出的视频分辨率不同。例如编码端摄像头采集到的YUV数据为1280x720,而接收端视频显示窗口为640x480。对于这种场景,一般的处......
  • BFS,DFS算法
    算法题目  基础:1.数组2.字符串3.排序4.贪心5.递归6.循环7.滑窗8.栈9.进制转换10.位运算11.队列12.哈希表13.链表14.线性表15.二分查找......
  • 青蛙过河算法
    Asmallfrogwantstogettotheothersideofariver.Thefrogisinitiallylocatedononebankoftheriver(position0)andwantstogettotheoppositeba......
  • C#-A*算法原理及代码实现
    前面提到过迪杰斯特拉算法,它的原理简述如下:1.将所有的点放在B集合。(起点距离为0,其他点为无穷大)2.从B集合找出距离最小的点,取走并放在A集合。3.根据A集合的新加入的点,......