LCD直線(線段)畫線算法

嘗試了多個(gè)版本雏逾,最好用的還是正點(diǎn)原子LCD驅(qū)動(dòng)提供的版本。

  1. x軸掃描法


    image.png

沒有進(jìn)行任何優(yōu)化郑临,掃描也是最簡(jiǎn)單的沿著x軸掃描栖博,y軸以斜率k逼近,最后采用四舍五入完成繪圖厢洞。
特點(diǎn)是只能畫斜率比較小的線仇让,斜率增大后會(huì)出現(xiàn)明顯的鋸齒,垂直直線畫出來就只剩下散點(diǎn)躺翻。
優(yōu)點(diǎn)也有丧叽,就是易于理解,畫圖速度高公你。

void LCD_DrawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, unsigned int color)
{

  if (x1 < x0)
  {
    int t = x0;
    x0 = x1;
    x1 = t;
    t = y0;
    y0 = y1;
    y1 = t;
  }

  int x;
  float dx, dy, y, k;
  dx = x1 - x0;
  dy = y1 - y0;
  k = dy / (float)dx;
  y = y0;
  // int step = x1>x0? 1 : -1;

  for (x = x0; x <= x1; x++)
  {
    LCD_DrawPixel(x, (int)(y + 0.5), color);
    y = y + k;
  }
}
  1. 正點(diǎn)原子優(yōu)化方法


    image.png

    采用了自適應(yīng)逼近方法踊淳,自動(dòng)選取最合適的增量方式,并規(guī)避了浮點(diǎn)數(shù)運(yùn)算陕靠。

void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, unsigned int color)
{
  uint16_t t;
  int xerr = 0, yerr = 0, delta_x, delta_y, distance;
  int incx, incy, uRow, uCol;
  delta_x = x2 - x1; //計(jì)算坐標(biāo)增量
  delta_y = y2 - y1;
  uRow = x1;
  uCol = y1;
  if (delta_x > 0)
    incx = 1; //設(shè)置單步方向
  else if (delta_x == 0)
    incx = 0; //垂直線
  else
  {
    incx = -1;
    delta_x = -delta_x;
  }
  if (delta_y > 0)
    incy = 1;
  else if (delta_y == 0)
    incy = 0; //水平線
  else
  {
    incy = -1;
    delta_y = -delta_y;
  }
  if (delta_x > delta_y)
    distance = delta_x; //選取基本增量坐標(biāo)軸
  else
    distance = delta_y;
  for (t = 0; t <= distance + 1; t++) //畫線輸出
  {
    LCD_DrawPixel(uRow, uCol, color); //畫點(diǎn)
    xerr += delta_x;
    yerr += delta_y;
    if (xerr > distance)
    {
      xerr -= distance;
      uRow += incx;
    }
    if (yerr > distance)
    {
      yerr -= distance;
      uCol += incy;
    }
  }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末迂尝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子剪芥,更是在濱河造成了極大的恐慌垄开,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件税肪,死亡現(xiàn)場(chǎng)離奇詭異溉躲,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)寸认,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門签财,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人偏塞,你說我怎么就攤上這事“铞辏” “怎么了灸叼?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)庆捺。 經(jīng)常有香客問我古今,道長(zhǎng),這世上最難降的妖魔是什么滔以? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任捉腥,我火速辦了婚禮,結(jié)果婚禮上你画,老公的妹妹穿的比我還像新娘抵碟。我一直安慰自己桃漾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布拟逮。 她就那樣靜靜地躺著撬统,像睡著了一般。 火紅的嫁衣襯著肌膚如雪敦迄。 梳的紋絲不亂的頭發(fā)上恋追,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音罚屋,去河邊找鬼苦囱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脾猛,可吹牛的內(nèi)容都是我干的沿彭。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼尖滚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼喉刘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起漆弄,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤睦裳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后撼唾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體廉邑,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年倒谷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蛛蒙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡渤愁,死狀恐怖牵祟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抖格,我是刑警寧澤诺苹,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站雹拄,受9級(jí)特大地震影響收奔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜滓玖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一坪哄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦翩肌、人聲如沸模暗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汰蓉。三九已至,卻和暖如春棒卷,著一層夾襖步出監(jiān)牢的瞬間顾孽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工比规, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留若厚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓蜒什,卻偏偏與公主長(zhǎng)得像测秸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灾常,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345