當前位置:首頁 » 編程語言 » 線C語言

線C語言

發布時間: 2022-05-29 02:58:46

㈠ 怎麼用c語言畫點和直線

  1. 這個不管怎麼說不是最開始的控制台的程序,這個新建工程的時候需要選擇的是Win32的程序

  2. 畫線的函數使用windows提供的API,MoveTo:移動到起點,LineToEx:移動到終點的這兩個函數,是在OnPaint,或是響應WM_PAINT的消息的時候處理這兩個函數;畫點的畫,使用SetPixel這個函數,同樣也是在WM_PAINT的消息中去處理與畫圖有關的操作的

㈡ c語言中的下滑線怎麼打出來啊!

是圖中的hello_c!中的下劃線嗎?

摁住shift,再摁一下鍵盤加號(+)左邊的(-)即可!記住不要調出輸入法。

㈢ 請問C語言一條豎線表示什麼

「|」在C語言中表示按位或,是雙目運算符。其功能是參與運算的兩數各對應的二進位(也就是最後一位)相或。只要對應的二個二進位有一個為1時,結果位就為1。參與運算的兩個數均以補碼出現。

例如:13|17可寫算式如下:

(3)線C語言擴展閱讀:

1、位運算:

整數在計算機中用二進制的位來表示,C語言提供一些運算符可以直接操作整數中的位,稱為位運算,這些運算符的操作數都必須是整型的。

& 按位與, | 按位或 , ^ 按位異或

AND (位與&) OR ( 位或| ) XOR ( 位異或^ )

2、豎式運算

按位或是位運算的一種,是將兩個數據的二進製表示右對齊後,按位進行運算,兩個對應的二進制位中只要一個是1,結果對應位就是1。

1 | 1 = 1 , 1 | 0 = 1 , 0 | 1 = 1 , 0 | 0 = 0

㈣ 求一用C語言畫直線的程序

不調用畫圖 API,用C 或 C++ 如何實現畫一條線?
Milo Yip:如何開始用 C++ 寫一個光柵化渲染器?
我嘗試用不同技術實現畫直線的方法(完整源代碼在 miloyip/line),此文簡單介紹個中思路。本文的代碼採用 C 語言、標准庫及極簡的 PNG 編碼函數 svpng(),沒有使用其他 API。

1. Bresenham 演算法
Bresenham直線演算法 [1] 是最簡單的直線光柵化(rasterization)演算法。


Bresenham 直線
如果像上圖,直線的高度小於寬度,那麼 Bresenham 直線演算法會為 軸每個坐標填入一個像素,繪畫每個像素時按斜率判斷 是否需要調整。整個演算法可以避開浮點數運算,只用整數運算實現。以下是一個簡單實現:

// Modified from https://rosettacode.org/wiki/Bitmap/Bresenham%27s_line_algorithm#C
void bresenham(int x0, int y0, int x1, int y1) {
int dx = abs(x1 - x0), sx = x0 < x1 ? 1 : -1;
int dy = abs(y1 - y0), sy = y0 < y1 ? 1 : -1;
int err = (dx > dy ? dx : -dy) / 2;

while (setpixel(x0, y0), x0 != x1 || y0 != y1) {
int e2 = err;
if (e2 > -dx) { err -= dy; x0 += sx; }
if (e2 < dy) { err += dx; y0 += sy; }
}
}
為了測試不同角度,我做了一個測試用例:

int main() {
memset(img, 255, sizeof(img));
float cx = w * 0.5f - 0.5f, cy = h * 0.5f - 0.5f;
for (int j = 0; j < 5; j++) {
float r1 = fminf(W, H) * (j + 0.5f) * 0.085f;
float r2 = fminf(W, H) * (j + 1.5f) * 0.085f;
float t = j * PI / 64.0f;
for (int i = 1; i <= 64; i++, t += 2.0f * PI / 64.0f) {
float ct = cosf(t), st = sinf(t);
bresenham((int)(cx + r1 * ct), (int)(cy - r1 * st), (int)(cx + r2 * ct), (int)(cy - r2 * st));
}
}
svpng(fopen("line_bresenham.png", "wb"), W, H, img, 0);
}
完整代碼 line_bresenham.c

渲染結果及中間局部放大:



2. 采樣方法
Bresenham 直線演算法有 3 個問題:

不能控制直線寬度;
坐標為整數;
只能對像素寫入一個顏色,只用單色會有嚴重的鋸齒效果。
在圖形學中,除了以逐個圖元(如直線)方式渲染,我們還可以通過對每個像素進行采樣(sampling),換句話說,我們可對整個圖像逐像素詢問:「這個像素的顏色是什麼?」

用采樣方式畫直線時,我們可以用一個具有面積的形狀去表示「直線」,例如是長方形。但在本文中,我們使用膠囊體(capsule)去表示直線。這樣就能解決上面前兩個問題:(1) 可用膠囊體半徑設置直線的寬度;(2) 坐標可以為浮點數。不過,用最簡單的采樣方式,我們需要在每像素查詢所有圖元是否佔有該像素,效率很低。

㈤ 怎樣用C語言繪制直線

【C語言的用MoveTo()和LineTo()】
#include<graphics.h>
#include<math.h>
/*
###############################################################################
功 能:本函數的作用是用逐點比較法來畫一條直線
格 式:void myline1(int x1,int y1,int x2,int y2,int color)
參數說明:x1,y1是起始點坐標,x2,y2是終止點,color是畫線的顏色
調用示例:myline1(10,20,500,440,4)
###############################################################################
*/
void myline1(int x1,int y1,int x2,int y2,int color)
{
/*變數定義開始(2007/10/16增加)*/
int iTx; /*x軸終點的相對坐標xa或臨時變數*/
int iTy; /*y軸終點的相對坐標ya或臨時變數*/
int iDx; /*x軸方向的步長dx*/
int iDy; /*y軸方向的步長dy*/
int iFt; /*偏差Fm*/
int iSt; /*記數循環數(dx+dy)S*/
int iXt; /*x方向循環變數xm*/
int iYt; /*y方向循環變數ym*/
/*變數定義結束*/
/*變數初始化開始*/
/*如果是第三象限或第四象限則換成第一或第二象限*/
if(y2<y1)
{
iTx=x1;
x1=x2;
x2=iTx;
iTy=y1;
y1=y2;
y2=iTy;
}
iTx=x2-x1; /*取x軸的相對坐標*/
iTy=y2-y1; /*取y軸的相對坐標*/
iDx=1;
iDy=1;
iFt=0;
iSt=iTx+iTy;
if(iTx<0)iSt=-1*iTx+iTy;; /*如果在第二象限,則x軸方向步長取負值*/
iXt=0;
iYt=0;
/*變數初始化結束*/
/*數據處理開始*/
while(iSt>0)
{
putpixel(x1+iXt,y1+iYt,color);
if(iTx>=0) /*如果在第一象限*/
{
if(iFt<0) /*如果偏差小於0*/
{
iYt+=iDy; /*y方向走一步*/
iFt+=iTx;
}
else /*如果偏差大於或等於0*/
{
iXt+=iDx; /*x方向走一步*/
iFt-=iTy;
}
}
else
{
if(iFt<0) /*如果偏差小於0*/
{
iXt-=iDx; /*負x方向走一步*/
iFt+=iTy;
}
else /*如果偏差大於或等於0*/
{
iYt+=iDy; /*y方向走一步*/
iFt+=iTx;
}
}
iSt--;
}
}
/*
###############################################################################
功 能:本函數的作用是用來畫一條直線
格 式:void myline2(int x1,int y1,int x2,int y2,int color)
參數說明:x1,y1是起始點坐標,x2,y2是終止點,color是畫線的顏色
調用示例:myline2(10,20,500,440,4)
###############################################################################
*/
int myline2(int x1,int y1,int x2,int y2,int color)
{
int iX; /*x方向的坐標變數*/
int iY; /*y方向的坐標變數*/
int iTx; /*x方向的步長變數*/
int iTy; /*y方向的步長變數*/
float fDx; /*x方向的差分變數*/
float fDy; /*y方向的差分變數*/
float fMinf; /*演算法中的f*/
float fMaxF; /*演算法中的F*/
float fS; /*終點判斷變數*/
fMinf=0.5; /*f=0.5*/
iX=x1;
iY=y1;
putpixel(x1,y1,color);
if(x1==x2&&y1==y2) /*如果終點和起始點相同*/
{
return(1);
}
iTx=1;
iTy=1;
fDx=(float)(x2-x1);
fDy=(float)(y2-y1);
fMaxF=fDy/fDx>0?fDy/fDx:(-fDy/fDx); /*F=|dy/dx|*/
if(fDx<0)iTx=-1;
if(fDy<0)iTy=-1;
fS=fDx>0?fDx:(-fDx);
if(fMaxF==1) /*如果F=1*/
{
iX=x1;
iY=y1;
while(fS>0)
{
iX+=iTx; /*x方向走一步*/
iY+=iTy; /*y方向走一步*/
putpixel(iX,iY,color);
fS--;
}
}
else if(fMaxF>1) /*如果F>1*/
{
fS+=fDy>0?fDy:(-fDy);
while(fS>0)
{
iY+=iTy; /*y方向走一步*/
putpixel(iX,iY,color);
fMinf+=1/fMaxF; /*f=f+1/F*/
fS--;
if(fMinf>=1) /*如果f>=1*/
{
iX+=iTx; /*x方向走一步*/
fMinf--; /*f=f-1*/
putpixel(iX,iY,color);
fS--;
}
}
}
else /*如果F<1*/
{
fS+=fDy>0?fDy:(-fDy);
while(fS>0)
{
iX+=iTx; /*x方向走一步*/
putpixel(iX,iY,color);
fMinf+=fMaxF; /*f=f+F*/
fS--;
if(fMinf>=1) /*如果f>=1*/
{
iY+=iTy; /*y方向走一步*/
fMinf--; /*f=f-1*/
putpixel(iX,iY,color);
fS--;
}
}
}
}【能夠畫出任意斜率的直線演算法程序】
int dx,dy,incrE,incrNE,d,x,y;
if ((point[1].x-point[0].x)==0){ //垂直的直線
x=point[0].x;
for(y=point[0].y;y<point[1].y;y++)
pDC->SetPixel(x,y,50);
}
else if(abs((point[1].y-point[0].y)/(point[1].x-point[0].x))<=1){ //斜率 -1到 1 之間
dx=point[1].x-point[0].x;
dy=point[0].y-point[1].y;
d=dx-2*dy; incrE=-2*dy;
incrNE=2*(dx-dy);
x=point[0].x,y=point[0].y;
pDC->SetPixel(x,y,50);
if(point[0].y>point[1].y){
while(x<point[1].x)
{
if(d>=0){
d+=incrE;
x++;
}
else
{d+=incrNE;<br> x++;<br> y--;<br> }
pDC->SetPixel(x,y,50);
}
}
else if(point[0].y<=point[1].y){
dy=point[1].y-point[0].y;
incrE=-2*dy;
incrNE=2*(dx-dy);
x=point[0].x,y=point[0].y;
pDC->SetPixel(x,y,50);
while(x<point[1].x)
{
if(d>=0){
d+=incrE;
x++;
}
else
{d+=incrNE;<br> x++;<br> y++;<br> }
pDC->SetPixel(x,y,50);
}
}
}
else { //斜率 <-1 和 >1的直線
if(point[1].x>=point[0].x){
dx=point[1].x-point[0].x;
dy=point[1].y-point[0].y;
d=2*dx-dy;
incrE=2*dx;
incrNE=2*(dx-dy);
x=point[0].x,y=point[0].y;
pDC->SetPixel(x,y,50);
while(x<point[1].x)
{
if(d<0){
d+=incrE;

y++;

}
else
{d+=incrNE;<br> pDC->SetPixel(x,y,50);<br> x++;<br> y++;<br> }
pDC->SetPixel(x,y,50);
}
}
else if((point[1].y-point[0].y)/(point[1].x-point[0].x)<-1){
dx=point[1].x-point[0].x;
dy=point[0].y-point[1].y;
d=2*dx-dy;
incrE=2*dx;
incrNE=2*(dx-dy);
x=point[0].x,y=point[0].y;
pDC->SetPixel(x,y,50);
while(y<point[1].y)
{
if(d>0){
d+=incrE;
y++;

}
else
{d+=incrNE;<br> x--;<br> y++;<br> }
pDC->SetPixel(x,y,50);
} }
}

㈥ c語言lien劃線不是很懂

把Sleep後面的延時數值增大到3秒,這樣你可以看到畫線的過程。看坐標的相對關系,很明顯,第一個line用於畫水平線,第二個line用於畫垂直線

㈦ 線與在C語言里是什麼意思

線與是或。在電路中線與就是把兩根線接到一起,如果任意一條線有信號那麼輸出就有信號。所以線與的意思為或。 第一條線的信號表示為A,第二條線表示為B,則線與即A||B。

㈧ C語言線性結構和非線性結構怎麼區分啊

一、線性結構是一個有序數據元素的集合。 其中數據元素之間的關系是一對一的關系,即除了第一個和最後一個數據元素之外,其它數據元素都是首尾相接的。常用的線性結構有:線性表,棧,隊列,雙隊列,數組,串。
二、非線性結構中各個數據元素不再保持在一個線性序列中,每個數據元素可能與零個或者多個其他數據元素發生聯系。根據關系的不同,可分為層次結構和群結構。
1、層次結構是按層次劃分的數據元素的集合,指定層次上元素可以是零個或多個處於下一個層次上的直接所屬下層元素。最典型的層次結構即為樹形結構,比如Linux文件系統即為樹形結構。
2、群結構中所有的元素之間無順序關系,最典型的群結構是集合和圖。

㈨ c語言中一條豎線是什麼符號

「|」在C語言中表示按位或,是雙目運算符。其功能是參與運算的兩數各對應的二進位(也就是最後一位)相或。只要對應的二個二進位有一個為1時,結果位就為1。參與運算的兩個數均以補碼出現。

例如:13|17可寫算式如下:

(9)線C語言擴展閱讀:

1、位運算:

整數在計算機中用二進制的位來表示,C語言提供一些運算符可以直接操作整數中的位,稱為位運算,這些運算符的操作數都必須是整型的。

& 按位與, | 按位或 , ^ 按位異或

AND (位與&) OR ( 位或| ) XOR ( 位異或^ )

2、豎式運算

按位或是位運算的一種,是將兩個數據的二進製表示右對齊後,按位進行運算,兩個對應的二進制位中只要一個是1,結果對應位就是1。

1 | 1 = 1 , 1 | 0 = 1 , 0 | 1 = 1 , 0 | 0 = 0

㈩ 在vc中如何用c語言編寫程序能夠顯示點和線

樓主,實際上這個問題很多情況下是由於路徑設置的問題引起的,「cl.exe」是vc使用真正的編譯器(編譯程序),其路徑在「vc根目錄\vc98\bin」下面,你可以到相應的路徑下找到這個應用程序。
因此問題可以按照以下方法解決:點擊vc「tools(工具)」—>「option(選擇)」—>「directories(目錄)」重新設置「excutable
fils、include
files、library
files、source
files」的路徑。很多情況可能就一個盤符的不同(例如你的vc裝在c,但是這些路徑全部在d),改過來就應該ok了

熱點內容
存儲時4k 發布:2025-02-12 09:33:31 瀏覽:87
stn資料庫 發布:2025-02-12 09:32:31 瀏覽:602
iossocket編程 發布:2025-02-12 09:32:20 瀏覽:899
sql語句相等 發布:2025-02-12 09:32:19 瀏覽:351
278源碼 發布:2025-02-12 09:22:40 瀏覽:248
13人牛牛源碼 發布:2025-02-12 09:22:40 瀏覽:155
win2008r2搭建iscsi伺服器 發布:2025-02-12 09:18:30 瀏覽:634
python解壓zip 發布:2025-02-12 09:08:46 瀏覽:921
如何加強人員配置 發布:2025-02-12 09:07:54 瀏覽:417
lol一區為什麼伺服器好卡 發布:2025-02-12 09:02:22 瀏覽:629