haocon找圓 經典演算法 繪製空心圓

2021-10-12 15:12:44 字數 2432 閱讀 9924

第一步:建立座標系

根據上一次繪製余弦曲線的經驗,我們可以把橫軸(行方向)設為x座標,縱軸(列方向)設為y座標。利用圓的公式:r²=x²+y²,每乙個y的值都會對應乙個唯一的x值。同樣,我們必須要理解,那就是先有演算法後有程式,所以具體怎麼實現,我們得先在草稿上表示出來,然後再依此來編寫程式,具體情況如下圖所示:

我們的方案是,先繪製左半邊的圖形,後繪製右半邊的圖形。y從10到(-10)逐一遞減,根據公式,每乙個y的值的會對應乙個唯一的x值,我們再再對應的點上畫上星號「*」,其餘均輸出空格即可。這裡,我們設定圓的半徑為10,所以整個圖形的寬度是20。具體情況如下圖所示:

第二步:設定橫軸和縱軸(x,y座標軸)的步距

這裡我們設定半徑為10,所以y的範圍我們設為[10,-10],步距為1,總共20行。橫座標x的步距也是1,總共20列,但是考慮到螢幕的行間距和列間距不相等,所以我們還得加個調節係數,使m = 2.2*sqrt(100-y*y),其中,2.2就是調節係數。具體情況如下圖:

第三步:用*號繪製空心圓

執行結果如下圖所示:

圓的方程

在平面直角座標系中,以點o(a,b)為圓心,以r為半徑的圓的標準方程是(x-a)2+(y-b)2=r2。

特別地,以原點為圓心,半徑為r(r>0)的圓的標準方程為x2+y2=r2。

方程x2+y2+dx+ey+f=0可變形為(x+d/2)2+(y+e/2)2=(d2+e2-4f)/4.故有:

(1)當d2+e2-4f>0時,方程表示以(-d/2,-e/2)為圓心,以

為半徑的圓;

(2)當d2+e2-4f=0時,方程表示乙個點(-d/2,-e/2);

(3)當d2+e2-4f<0時,方程不表示任何圖形。

3、圓的引數方程:

以點o(a,b)為圓心,以r為半徑的圓的引數方程是 x=a+r·cosθ, y=b+r·sinθ, (其中θ為引數)

圓的端點式:

若已知兩點a(a1,b1),b(a2,b2),則以線段ab為直徑的圓的方程為 (x-a1)(x-a2)+(y-b1)(y-b2)=0

圓的離心率e=0,在圓上任意一點的曲率半徑都是r。

經過圓 x2+y2=r2上一點m(a0,b0)的切線方程為 a0·x+b0·y=r2

在圓(x2+y2=r2)外一點m(a0,b0)引該圓的兩條切線,且兩切點為a,b,則a,b兩點所在直線的方程也為 a0·x+b0·y=r2。

4、圓的三點式方程:過不共線的三點a(x1,y1),b(x2,y2),c(x3,y3)的圓的方程為

周長:c=2πr (r半徑)

面積:s=πr²

半圓周長:c=πr+2r

半圓面積:s=πr²/2

下面用gdi繪製圓的**:

/此函式使用畫圖的庫畫乙個圓

//引數使用 center_x 圓心x座標、center_y 圓心y座標、radius 半徑、color 所使用的顏色

//繪圖思想:

//把圓看成是以圓心為原點、x y分別為兩座標軸的乙個函式。對於上半圓 y=sqrt(radius*radius-x*x);對於下半圓y=-sqrt(radius*radius-x*x)

//因此 遍歷圓的圖形所經歷的所有x座標[-radius,radius] ;求出上下兩個y座標值y1,y2 ;分別往上、下半圓上畫點(x,y1) 、(x,y2)即可實現圓的繪製

//在實現中,由於在x軸邊界處y點過於稀疏,因此變換座標軸xy ; 重複上述繪圖過程 即可實現正常圓的繪製

voidglib_circle(intcenter_x,intcenter_y,intradius,intcolor)

intvar,offset;

//右方邊界限制

if(radius>scr_xsize_tft-center_x )

radius = scr_xsize_tft-center_x ;

//下方邊界限制

if( radius>scr_ysize_tft-center_y )

radius = scr_ysize_tft-center_y ;

//左方邊界限制

if(radius>center_x )

radius = center_x;

//右方邊界限制

if(radius>center_y)

radius = center_y;

//遍歷x/y軸 向x/y兩側的圓上的點寫畫素

for(var = -radius ;var

offset = sqrt(radius*radius - var*var);

putpixel(center_x+var,center_y+offset,color);

putpixel(center_x+var,center_y-offset,color);

putpixel(center_x+offset,center_y+var,color);

putpixel(center_x-offset,center_y+var,color);

演算法 找顏色

1億個球有1000種顏色,其中有一半的球是同一種顏色,採用一種方式能盡快的選出這個顏色。按照不同色的抵消思路,1億個球放在a桶,b桶是個空桶,將a桶的球乙個乙個轉移到b桶,如果放進桶裡顏色的球不同,就清除該色的球,剩餘的桶裡的球就是這個顏色 include include using namespa...

演算法問題,找數

問題描述 從乙個正整數m中去掉任意s位後,就會得到乙個新的正整數 保留各位數字的相對位置不變 去掉不同位上的數字就會得到不同的新整數,其中有乙個最小的正整數n,問題是 再利用最小新整數n的各位數字所組成的新整數中,找出大於n的最小整數,若不存在這樣的數,測輸出0.例如,位長位6的正整數175838,...

每天演算法 找硬幣

題目描述 伊娃喜歡從整個宇宙中收集硬幣。有一天,她去了一家宇宙購物中心購物,結賬時可以使用各種硬幣付款。但是,有乙個特殊的付款要求 每張帳單,她只能使用恰好兩個硬幣來準確的支付消費金額。給定她擁有的所有硬幣的面額,請你幫她確定對於給定的金額,她是否可以找到兩個硬幣來支付。輸入格式 第一行包含兩個整數...