zoukankan      html  css  js  c++  java
  • 计算机绘图原理 —— 直线的绘制

    任何复杂的几何图形都是由基本图形元素(点、线等)组成的,直线等基本图形生成的关键是如何利用算法及数学公式描述并在图形设备上显示出来。

    1. 直线的绘制

    平面直线由两个端点唯一确定,绘制直线函数的一般表达式为:

    • line(y1, x1, y2, x2, <属性参数>)

    在图形设备上绘制直线,实质上就是按照直线的延伸方向y2y1x2x1)不断地生成光点所连成的轨迹或绘出微小的线段,光点的间距及绘图笔移动的距离称为步长。那么,直线的绘制算法有许多种,下面主要介绍两种,即逐点比较法DDA 算法。

    • 逐点比较法

      位置偏差的判别方法:图中OA是要生成的直线的理论位置,起点是O,终点是A,设当前实际画出的点位置为X轴上的一点1,斜率等于零且小于α,可以判定下一步进的方向为Y的正方向。设前进一个步距的点为B,OB的斜率为β,如果β>α,则有tanβ>tanα,这说明OB线位于OA线的上面,判定下一次步进应在X轴方向;如果β<α,那么tanβ&l;tanα,说明OB线位于OA线的下面,下一次步进应沿Y轴方向步进。

      tanβtanα=yBxByAxA=xAyBxByAxBxA


      这里写图片描述

      当直线位于第一象限时,xA,xB>0,因而可以用下式判别 B 点的位
      置偏差,Δ=xAyBxByA
      Δ0,在 X 轴方向绘制一个单位步长,xi+1=xi+I
      Δ<0,在 Y 轴方向绘制一个单位步长,yi+1=yi+I

    • DDA 算法

      DDA 算法根据直线的微分方程来绘制直线,设直线的起始坐标 xs,ys,终点坐标为 xe,ye,则 Δx=xexs,Δy=yeys,则要绘制的直线的微分分方程为 Δx=dxdt,Δy=dydt,令 Δt=max(Δx,Δy),取时间步长为 1Δt,可得上述微分方程的递推公式:

    xi+1=xi+ΔxΔtyi+1=yi+ΔyΔt

  • 相关阅读:
    直接插入排序
    归并排序
    正则问题
    九宫重排
    java合并两个集合并通过stream流构建响应结果
    企业微信扫码登录
    docker安装es
    docker安装nacos随记
    解决docker安装mysql8.0无法远程连接问题
    java分析工具10:jvm测试与调优
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9423271.html
Copyright © 2011-2022 走看看