當前位置:首頁 » 操作系統 » 演算法畫實心圓

演算法畫實心圓

發布時間: 2023-03-31 16:43:24

Ⅰ lcd240128的如何畫出一個圓的形狀

在 LCD 上 直接用像素點畫圓
1 先初始化LCD
在LCD上直接操作像素點,沒多少效率,實際測試中對字元界面也是可以的,直接上代碼:

2 怎麼計算像素點
根據方程 :(x-a)(x-a) + (y-b) (y-b) = r^2可以寫出最簡單的演算法

畫出第一個圓,仔細看這個圓,在最左邊有很多像素點「丟失」,這是因為從最左邊開始,在x+1後,y增幅較大,相鄰的兩個像素點縱坐標差值較大;而在靠近最高點處,Y的增幅又變小,導致看起來兩邊稀,上面密的效果。

.a…


a…

於是想到了對y軸進行像素補償,在 y_now - y_last > 1 的時候,補償y,防止y跳變

補償之後的圓長這個樣子,
.a…
.a…
.a…
a…
看著好像還是有點僵硬,乾脆補償的時候從中間截斷,前半部分用上一個像素點的x坐標,後半段才用下一個點的x坐標

像這樣
.a… 一半用新的橫坐標
.a…
a…一半用舊的橫坐標
a…

把三個圓的效果和微軟自帶的的畫圖工具畫的圓作對比:

優點:和微軟的比起來,左右的像素點看起來更平滑
缺點:上下的像素點還可以待進一步優化

3 代碼如下:
有空了我會把圖貼上

文章知識點與官方知識檔案匹配
C技能樹首頁概覽
108396 人正在系統學習中
打開CSDN APP,看更多技術內容

【玩轉嵌入式屏幕顯示】(三)TFT-LCD屏幕打點 + 畫線 + 畫矩形 + 畫圓...
0. 引言TFT-LCD屏幕的畫直線、畫斜線、畫矩形、畫圓等演算法都是基於打點函數的,所以此程序可以移植到任何屏幕的基本驅動程序之上。1. 打點函數 —— 底層函數(移植需修改)打點函數其實就是屏幕顯存(液晶控制器顯存)中某一個點的顏色...
畫圓方法小結_i_water的博客
1、在LCD屏幕上用顏色畫一個空心圓 #include <math.h>#define pi 3.1415926#define N 360void draw_Circle(intm,intn,intr,intcolor) {inti;intx,y;for(i=0;i<N;i++) {x=m+r*cos(2.0*pi*i/N);y= n+r*sin(2.0...
LCD 畫線方法及c語言實現
LCD 畫線方法及C語言實現,點陣LCD畫直線的多種方法
計算機圖形學---基於整個屏幕像素點的直接畫圓法
基於整個屏幕像素點的直接畫圓法 用來記錄一個基於整個屏幕像素點的直接畫圓法! 演算法簡介 設直線的兩個端點是A(Xa,Ya)和B(Xb,Yb),則我們僅需考慮x=Xa,x=Xb,y=Ya,y=Yb四條線圍成的矩形區域內的每一個像素點的情況,設P(X0,Y0);是該區域的任意像素點,則可以通過判斷P到直線AB之間的距離來決定P點是否被點亮。 點到直線的距離公式 d=∣Ax0+By0+CA2+b2∣ ...
繼續訪問

我的5110畫圖庫--Nokia 5110液晶屏實現畫點、畫線、畫矩形、畫圓...
#define LCD_Y 48 //液晶屏縱坐標高度 #define LCD_COLUMN LCD_Y / 8 //液晶屏行高度 #define LCD_AREA LCD_X * LCD_Y //液晶屏面積 #define LCD_AREA_BYTE LCD_COLUMN * LCD_ROW //液晶屏位元組容量 ...
(學習筆記)stm32f4在液晶上畫圓及填充圓的幾種方法
先說下畫圓,根據圓的對稱性將圓8等分,求出其中一份,其他可以通過坐標變換得到。得到過程可以網路中點畫圓法。 程序: void LCD_Draw_Circle(uint16_t Xpos,uint16_t Ypos,uint16_t Radius) { int16_t mx=Xpos,my=Ypos,x=0,y=Radius; int16_t d=1-Radius; while(y>x)
繼續訪問
LCD畫線畫圓
LCD畫線畫圓
mpy lcd 繪制圓
1.實心 def drawCirc_fill(tft,x,y,r,pen): ox =r oy =0 err = -r while ox>=oy: last_oy = oy err +=oy oy+=1 err+=oy tft.hline(x-ox,y+last_oy,ox*2+1,pen) ##3 if last_oy != 0: tft.hli
繼續訪問
lcd畫圓演算法
#include "math.h" #define PI 3.14159265 #define LCDWIDTH 800 #define LCDHEIGHT 480 //x,y:坐標 //color:顏色 //angle:角度 //radius:半徑 void LCD_DrawPoint_Rotate(u16 x,u16 y,u16 color, int angle,int radius) ...
繼續訪問
LCD編程顯示像素點
一 LCD屏幕 本次學習使用的LCD屏是一塊 800*480 解析度的全彩屏幕。 解析度的意思是:每行有800個像素點,一共有480行。 全彩的意思是:像素點顯示的顏色是由RGB紅綠藍三種單顏色組成,其次還有阿爾法粒子透明度A。也就是ARGB。 LCD顯示屏在工作中需要顯卡,顯卡中要有顯存。而本次學習的開發板沒有獨立顯卡,所以需要分配虛擬顯存。而每個像素點在顯存中占據4個位元組的空間,也就是ARGB...
繼續訪問
【LCD畫圓】演算法系列之十一:圓生成演算法
演算法系列之十一:圓生成演算法 原文:http://blog.csdn.net/orbit/article/details/7253285 分類: 演算法系列 2012-02-12 21:45 6828人閱讀 評論(21) 收藏 舉報 輸入您的搜索字詞 提交搜索表單 在平面解析幾何中,圓的方程可以描述為(x – x...
繼續訪問
熱門推薦 lcd彩屏畫點畫線和畫圓 嵌入式開發
在lcd顯示屏上的指定點畫出直線,點,圓 本文源於 海之遙的博客 http://blog.sina.com.cn/atpx1989 親測可行,覺得很有意義,拿過來以備以後用 //-----------畫點函數。參數:坐標,顏色------------------- void draw_point(int x, int y, int clor) { fb[
繼續訪問
STM32學習筆記-LCD畫直線,畫圓
STM32學習筆記-LCD畫直線,畫圓 1.畫直線 如果在兩點(a,b)(c,d)之間畫直線,首先考慮c>a,d>b,且k<1的情況,其他情況根據對稱關系就能推導出來了。 為了使問題簡單化,先將這兩點進行平移,將(a,b)平移到原點,那麼(c,d)變換後的坐標就是(e,f),其中e=c-a,f=d-b,斜率k=f/e; 假設在LCD上我們取的第i個像素點的坐標是(i,j),那麼第...
繼續訪問

C語言 程序 畫圓、畫圓和y=x^2
繪制圓 在屏幕上用「*」畫一個空心的圓 *問題分析與演算法設計 列印圓可利用圖形的左右對稱性。根據圓的方程: R*R=X*X+Y*Y 可以算出圓上每一點行和列的對應關系。 程序思想和之前的兩個程序一樣。整個圓向右平移R個單位,因為長寬比不一樣所以還要有個系數,下面是我寫的程序 #include #include #define R 10 #defi
繼續訪問
圖形學 畫圓演算法(Bresenham + 中點)
圓的特性 我們的圓中,具有對稱的特性,在xy坐標軸中具有八對稱的特性。 我們只需要畫出一個點 按照八對稱性,我們就能獲得八個點,所以我們只需要畫一個八分之一圓就好了。我們就選擇最利於我們思考的第一象限0~Math.sqrt(1)部分,就是上邊橘點位置的區域。 中點畫圓 我們通過中點到圓的距離(通過符號判定),我們就能選擇相應的點。我們每次的選擇中點時,增量都是有規律的。 我們通過對直...
繼續訪問
S3C2440裸機------LCD_畫點線圓
目錄 1.畫點 2.畫線、圓 1.畫點 我們首先實現畫點的函數, #include "lcd.h" /* 實現畫點 */ /* 獲得LCD參數 */ static unsigned int fb_base; static int xres, yres, bpp; void fb_get_lcd_params(void) { get_lcd_params(&fb_base, &xres, &yres, &bpp); } /* rgb: 0x00RRGGB
繼續訪問
記錄STM32F1控制LCD繪制圓形
註:代碼參考與正點原子教程 //繪制一個圓,傳入圓心坐標和半徑 void gui_dispCircle(uint32_t x0,uint32_t y0,uint32_t r) { int a,b; int di; a=0; b=r;
LCD編程_畫點線圓
上篇博客中進行了lcd的簡單測試,這篇博客將進行更加復雜的測試——畫點、畫線、畫圓。畫線和畫圓是在畫點的基礎上實現的,因此本篇博客重點實現畫點操作。 先拋出這樣的一個問題,已知: (x,y)的坐標; bpp; xres; yres; 那麼,如何在framebuffer中獲得像素的地址呢? (x,y)像素的起始地址 = fb_base +(xres * bpp /8...
繼續訪問
基於像素點的圖形顯示演算法(Bresenham圓形個人理解)
目錄 目的 幾何原理 代碼優化 參考區域選取 計算量 填充方式 程序源碼 目的 本實驗基於STM32F103RC+TFTLCD屏,旨在於在LCD屏上顯示一個實心圓形,然而眾所周知,對於屏幕而言,我們只能操作各個像素點,因此,選擇出最接近標准圓形的像素點就成了本次實驗的主要目的,最終得到的圓形大概應該長這樣 看起來很不規則,但是這里只是半徑為5個像素點的圓形,因此放大來...
繼續訪問

最新發布 TFT-LCD顯示直線、矩形、圓形
usR、usG、usB變數為16位,但首先讀取出的RED數據佔5位,且在高位元組,GREEN數據佔6位,同樣在高位元組,BLUE數據佔5位,在高位元組,所以組合時要通過移位,將RED數據放在usColor的高5位,GREEN數據佔中間的6位,剩下的5位放BLUE數據,這樣就組合成了RGB565的數據格式。如果是填充矩形,則調用填充顏色函數按照矩形的寬和高填充顏色就行,如果是不填充矩形,則畫四條直線。之前顯示ASCII字元、中文和圖片都是使用的取模軟體,這次直接用代碼驅動顯示直線、矩形和圓形。
繼續訪問

用C語言字元畫圓
用C語言畫圓,這是一是演算法的問題,我們知道,程序是由數據結構加演算法組成的,研究這類東西,其實也是研究演算法的問題,是比較有意思的。圓心為0的時候,圓的公式公式:那我們要如何寫代碼呢?示例代...
繼續訪問

【opencv學習筆記.1】操作像素畫圓
任何圖像處理演算法,都是從操作每個像素開始的,剛接觸Opencv,寫的第一個小程序:分別用動態地址和指針操作像素畫圓。 用的是VS2015搭opencv3.0 一.首先是用動態地址計算來操作像素,這種方法簡潔明了,符合大家對像素的直觀認識
lcd畫圓

Ⅱ MATLAB作圖時,如何把標志數據點的形狀做成實心的

代碼如下:

>>x = -pi:pi/10:pi;

>>y = tan(sin(x)) - sin(tan(x));

>> figure

plot(x,y,'--bs',...

'LineWidth',2,...

'MarkerSize',10,...

'MarkerFaceColor','b')

>> grid on

擴展資衡早裂料:

注意事項

一、繪制實心圓:

pha=0:pi/20:2*pi;%角度[0,2*pi]

R=2;%半咐閉徑睜仿

x=R*cos(alpha);

y=R*sin(alpha);

plot(x,y,'-')

axis equal

fill(x,y,'r');%用紅色填充

二、繪制實心圓點:

plot(1:8,'ro','MarkerFaceColor','r');

Ⅲ 怎樣用javascript畫個實心圓和計算器

1、JS畫圓

<script type="text/javascript">
//功能:畫實心圓
//參數:圓心坐標,半徑,精確度,背景顏色
//主要用到了中學時的圓的一些特徵公式呵呵

function SolidCircle(centreX, centreY, radius, precision, color){
var cx = Math.abs(parseInt(centreX));
var cy = Math.abs(parseInt(centreY));
var r = parseInt(radius<2 ? 60 : radius);
var p = parseInt(precision<1 ? 1 : precision);
var c = color;

var y;
for(var x=cx-r; x<=cx+r; x+=p){
y = cy - Math.sqrt(Math.pow(r, 2) - Math.pow(cx - x, 2));
document.write('<img style="background:'+c+'; border:1 solid '+c+'; width:'+p+'; height:'+parseInt(2*Math.sqrt(Math.pow(r, 2) - Math.pow(cx - x, 2)))+'; position:absolute; top:'+parseInt(y)+'; left:'+parseInt(x)+';">');
}

//alert("一共有 " + document.all.length + " 個 <img>");
}
SolidCircle(450, 100, 100, 1, "green");
</script>

2、計算器的連加原理其實和連續計算的原理是一樣的,所以,在JS裡面一定要定義一個全局變數,不論是加減乘除都調用這個變數即可。下面是一段完整的計算器代碼,你可以參考一下,也可以解決你的問題。

<FORM name="Keypad" action="">
<TABLE>
<B>
<TABLE border=2 width=50 height=60 cellpadding=1 cellspacing=5>
<TR>
<TD colspan=3 align=middle>
<input name="ReadOut" type="Text" size=24 value="0" width=100%>
</TD>
<TD
</TD>
<TD>
<input name="btnClear" type="Button" value=" C " onclick="Clear()">
</TD>
<TD><input name="btnClearEntry" type="Button" value=" CE " onclick="ClearEntry()">
</TD>
<睜舉帶/TR>
<TR>
<TD>
<input name="btnSeven" type="Button" value=" 7 " onclick="NumPressed(7)">
</TD>
<TD>
<input name="btnEight" type="Button" value=" 8 " onclick="NumPressed(8)">
</TD>
<TD>
<input name="btnNine" type="Button" value=" 9 " onclick="NumPressed(9)">
</TD>
<答脊TD>
</TD>
<TD>
<input name="btnNeg" type="Button" value=" +/- " onclick="Neg()">
</TD>
<TD>
<input name="btnPercent" type="Button" value=" % " onclick="Percent()">
</TD>
</TR>
<TR>
<TD>
<input name="btnFour" type="Button" value=" 4 " onclick="NumPressed(4)">
</TD>
<TD>
<input name="btnFive" type="Button" value=" 5 " onclick="NumPressed(5)">
</TD>
<TD>悉蘆
<input name="btnSix" type="Button" value=" 6 " onclick="NumPressed(6)">
</TD>
<TD>
</TD>
<TD align=middle><input name="btnPlus" type="Button" value=" + " onclick="Operation('+')">
</TD>
<TD align=middle><input name="btnMinus" type="Button" value=" - " onclick="Operation('-')">
</TD>
</TR>
<TR>
<TD>
<input name="btnOne" type="Button" value=" 1 " onclick="NumPressed(1)">
</TD>
<TD>
<input name="btnTwo" type="Button" value=" 2 " onclick="NumPressed(2)">
</TD>
<TD>
<input name="btnThree" type="Button" value=" 3 " onclick="NumPressed(3)">
</TD>
<TD>
</TD>
<TD align=middle><input name="btnMultiply" type="Button" value=" * " onclick="Operation('*')">
</TD>
<TD align=middle><input name="btnDivide" type="Button" value=" / " onclick="Operation('/')">
</TD>
</TR>
<TR>
<TD>
<input name="btnZero" type="Button" value=" 0 " onclick="NumPressed(0)">
</TD>
<TD>
<input name="btnDecimal" type="Button" value=" . " onclick="Decimal()">
</TD>
<TD colspan=3>
</TD>
<TD>
<input name="btnEquals" type="Button" value=" = " onclick="Operation('=')">
</TD>
</TR>
</TABLE>
</TABLE>
</B>
</FORM>
</CENTER>
<font face="Verdana, Arial, Helvetica" size=2>
<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
var FKeyPad = document.Keypad;
var Accum = 0;
var FlagNewNum = false;
var PendingOp = "";
function NumPressed (Num) {
if (FlagNewNum) {
FKeyPad.ReadOut.value = Num;
FlagNewNum = false;
}
else {
if (FKeyPad.ReadOut.value == "0")
FKeyPad.ReadOut.value = Num;
else
FKeyPad.ReadOut.value += Num;
}
}
function Operation (Op) {
var Readout = FKeyPad.ReadOut.value;
if (FlagNewNum && PendingOp != "=");
else
{
FlagNewNum = true;
if ( '+' == PendingOp )
Accum += parseFloat(Readout);
else if ( '-' == PendingOp )
Accum -= parseFloat(Readout);
else if ( '/' == PendingOp )
Accum /= parseFloat(Readout);
else if ( '*' == PendingOp )
Accum *= parseFloat(Readout);
else
Accum = parseFloat(Readout);
FKeyPad.ReadOut.value = Accum;
PendingOp = Op;
}
}
function Decimal () {
var curReadOut = FKeyPad.ReadOut.value;
if (FlagNewNum) {
curReadOut = "0.";
FlagNewNum = false;
}
else
{
if (curReadOut.indexOf(".") == -1)
curReadOut += ".";
}
FKeyPad.ReadOut.value = curReadOut;
}
function ClearEntry () {
FKeyPad.ReadOut.value = "0";
FlagNewNum = true;
}
function Clear () {
Accum = 0;
PendingOp = "";
ClearEntry();
}
function Neg () {
FKeyPad.ReadOut.value = parseFloat(FKeyPad.ReadOut.value) * -1;
}
function Percent () {
FKeyPad.ReadOut.value = (parseFloat(FKeyPad.ReadOut.value) / 100) * parseFloat(Accum);
}
// End -->
</SCRIPT>

補充哦,怕在網路hi上給你的留言你看不到呵呵
----------------------------------------
那個圓也是沒有問題的,因為給學生上課講過這個演算法,它有些類似於微積分中圓的面積求法,其實是將圓沿X軸進行細分,細分的精度由precision決定,所以,當你在這段代碼中將精確降低的話,圓的邊界就很粗糙,把細分後的每一塊把它看成一個圖形,這樣累加起來,不就組成一個實習圓了嘛(截止到這兒,講的是演算法問題)。然後呢,代碼的精髓在於那個For循環,(var x=cx-r; x<=cx+r; x+=p)表示變數是從圓的最左邊開始的[因為圓心cx-半徑r得到最左邊,下同],到最右邊結束[cx+r],而每次增加多少呢,是由精度控制的[x+=p],然後循環體內的代碼的精髓是圖片的寬度和高度那塊兒,寬度當然就等於精度了,高度的那個公式y = sqrt(r^2 - x^2)是畫圓的必備公式,你應該明白吧。好了,到此為止,這段代碼的原理和實現我都說到這兒了,希望你能明白。

Ⅳ 在cad 中,如何畫出一個實心圓點

1、打開CAD。


2、打開CAD後,在命令欄中輸入DO命令。


3、輸入Do後,指定圓環的內徑輸入0。


4、然後再指定圓環的外徑中輸入5,也就是需要多大的圓點就輸入多少的數據。


5、確定圓環外禪汪徑後賀瞎仔,點擊一神漏下就可以畫一個點。

Ⅳ matlab中如何畫實心圓 ,急求,准確代碼!matlab

t = linspace(0,2*pi,100);
x = 10 * cos(t); % x 軸薯灶毀數據
y = 10 * sin(t); % y 軸數據辯斗
plot(x,y) % 畫圓
fill(x,y,'r') % 填充紅色數備
axis square

Ⅵ 用c語言畫一個實心圓

可以試試opencv,開源念穗庫,老版本(應該2以下)都是並穗c代碼,要繪圖涉及和系統資源相關的代碼用純c寫很麻煩的絕高卜。

Ⅶ 怎麼用matlab畫圓

大致思路利用圓的參數方程去畫圓。

1、進入命令行窗口(Command Window)。

擴租畢展資料

當我們需要用畫圖對不同類別的數據點進行連線的時候,可以設置以下屬性來區分不同類別的點和相應的直線:

(1)LineStyle:線形

(2)MarkerSymbol:點形

(3)Color:顏色

例如:

plot(x,y,'m','Linewidth',1)

其中「m」為紫紅色,「1」線寬為1

plot(x,y,'-.or','MarkerFaceColor','g')

其中線形為點橫線,數據點形狀為圓圈,線條和數據點邊緣的顏色都是紅色,數據點吵型笑的填充顏色為綠色。

Ⅷ cad繪制實心圓有幾種方法,分別是什麼

首先,打開CAD,我們先畫一個圓,如圖所示,點擊左側工具欄中的「圓」命令按鈕。

02
然後在頁面中,根據要求畫一個圓。畫燃猛完之後,點擊菜單欄「繪圖」,下拉菜單中選擇「圖案填充」。

03
出現「圖案填充」選項框,點擊其中的「添加拾取點」,然後把圓選中(如圖所示,選中之後圓變成虛線),點擊確認後回到圖案填充選項框。

或者
1.首先我們打開CAD軟體

2.根據我們的尺度的要求,我嫩來皮喊橋繪制一條線段。

3.我們輸入【pl】這個命令,繪制我們曲線的多線段,

4.然後輸入【mi】命令,將我們繪制一半的圓沿著剛才畫的線段鏡像,並且將中間的線段刪除。

5.輸入【pe】的命令,將我們的兩個半圓拼合起來。

6.再用【pe-w】這個命令給合並後的多線段一個寬度,輸入我們的線寬值。
以上步驟操作完成,我們就繪制滲耐好一個有線寬的實心圓環了,所以我們一定要多個命令配合使用,理清楚邏輯思維。

Ⅸ 在VC++中如何畫出一個圓

VC++畫圓形可以使用API函數:Ellipse(int x1, int y1, int x2, int y2);
其畫圓的原理是矩形的內切圓,四個參數中的前兩個是矩形左上角坐標,後兩個是矩形右下角坐標。VC++畫圖形前得先有一塊畫布DC即設備上下文。下面個例子:

void CrrDlg::PaintCircle() //畫實心圓函數{ CDC *pDC = this->GetDC(); //獲取DC CBrush brush,*oldbrush; //畫刷 //通過定時器中num遞增,實現紅色圓形與綠色圓形交替出現,即閃燈現象 if (num%2){ //num為定時器計數參數,其為偶數時畫紅色圓形 brush.CreateSolidBrush(RGB(255,0,0)); } else{ //num為奇數時,畫綠色圓形櫻掘 brush.CreateSolidBrush(RGB(0,255,0)); } oldbrush=pDC->SelectObject(&brush); pDC->Ellipse(10,10,100,100); pDC->Ellipse(110,10,200,100); pDC->SelectObject(oldbrush); ReleaseDC(pDC);} void CrrDlg::OnTimer(UINT_PTR nIDEvent) //銷頌粗定時器{ num++; PaintCircle(); CDialogEx::OnTimer(nIDEvent);} 畫空心圓環需要使用畫筆CPen,虧鎮畫法一樣。

Ⅹ C# 畫個實心圓

用Brush填充,不用陪局岩Pen

System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red);//畫刷蘆御
formGraphics.FillEllipse(myBrush, new Rectangle(0, 0, 100, 200));//臘數畫實心橢圓

熱點內容
伺服器有外網ip 發布:2025-05-19 14:02:02 瀏覽:832
電腦上c語言編程軟體 發布:2025-05-19 13:55:17 瀏覽:123
php56windows 發布:2025-05-19 13:54:23 瀏覽:716
如何查看攻擊過伺服器的ip地址 發布:2025-05-19 13:45:44 瀏覽:941
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:379
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:613
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:945