用c語言畫圖
❶ 用c語言寫程序,此程序能畫出來函數y=2x+5的曲線圖形。
此題把數學問題轉化為用C語言描述即可,很多畫圖問題可以使用這種方法。
假設屏幕左上角為坐標軸原點
#include<stdio.h>
#defineMAX30//選定曲線要顯示的范圍,因為一次函數是一條直線,所以它的顯示範圍無窮
intmain()
{
intx,y;
for(y=30;y>=0;y--)
{
for(x=0;x<MAX;x++)
{
if(y==2*x+5)
{
printf("*");
}
else
{
printf("");//空格,不滿足y=2x+5的點
}
}
printf("
");//x軸已經到顯示範圍,所以需要換行。
}
return0;
}
❷ 誰知道C語言怎麼畫圖啊
Turbo C提供了非常豐富的圖形函數, 所有圖形函數的原型均在graphics. h中, 本節主要介紹圖形模式的初始化、獨立圖形程序的建立、基本圖形功能、圖形窗口以及圖形模式下的文本輸出等函數。另外, 使用圖形函數時要確保有顯示器圖形驅動程序*BGI, 同時將集成開發環境Options/Linker中的Graphics lib選為on, 只有這樣才能保證正確使用圖形函數。由於種類比較多,所以下面僅列舉2個例子,拋磚引玉→
1.點
void far putpixel(int x, int y, int color);
2.線
void far line(int x0, int y0, int x1, int y1); 畫一條從點(x0, y0)到(x1, y1)的直線。
void far lineto(int x, int y); 畫一作從現行游標到點(x, y)的直線。
void far linerel(int dx, int dy); 畫一條從現行游標(x, y)到按相對增量確定的點(x+dx, y+dy)的直線。
void far circle(int x, int y, int radius); 以(x, y)為圓心, radius為半徑, 畫一個圓。
c語言的圖形部分是很有意思的,也是c中最精彩的內容之一,希望你能很快享受它的樂趣。
❸ 求一用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) 坐標可以為浮點數。不過,用最簡單的采樣方式,我們需要在每像素查詢所有圖元是否佔有該像素,效率很低。
❹ 如何在VC裡面用C語言繪制圖形,直線,圓等等。另外頭文件<graphics.h>在VC下不能使用,為什麼
<graphics.h>是TC下使用的庫
建立MFC文件,添加菜單「功能性按鍵」時選擇「CVIEW」
函數內容如下(我用的Visual studio 2010,可能有些版本不同導致操作不同)
CDC*pDC=GetDC();//得到繪圖類指針
RedrawWindow();//重建窗口
pDC->Rectangle(50,20,700,400);//以默認畫筆畫一矩形
CPen bluepen(PS_DASH,1,RGB(0,0,255));//創建畫虛線,線寬為1的藍色畫筆
CPen*old=pDC->SelectObject(&bluepen);
pDC->Ellipse(100,50,250,200);//畫圓
CPen redpen(PS_SOLID,2,RGB(255,0,0));//創建畫實線,線寬為2的紅色畫筆
pDC->SelectObject(&redpen);
pDC->Ellipse(500,50,650,200);//畫圓
pDC->MoveTo(375,100);//畫一三角形
pDC->LineTo(225,300);
pDC->LineTo(525,300);
pDC->LineTo(375,100);
CBrush greenBrush(RGB(0,255,0));//創建純色的綠色畫筆刷
pDC->SelectObject(&greenBrush);
pDC->FloodFill(375,200,RGB(255,0,0));//以純色綠筆刷填充三角形
CBrush green1Brush(HS_FDIAGONAL,RGB(0,255,0));//創建影線為斜線的綠色筆刷
pDC->SelectObject(&green1Brush);
pDC->FloodFill(600,150,RGB(255,0,0));//以綠色斜線筆刷填充圓
pDC->SelectObject(old);//釋放創建的畫筆,回復原來的畫筆
pDC->TextOut(335,250,"HELLO WORLD,It's my first computer graphic work!");//輸出字元
ReleaseDC(pDC);//釋放創建的CDC對象
❺ C語言實現畫圖功能
tc/bc在dos下自帶圖形驅動,可以使用graphics.h 頭文件調用標准C函數,如果堅決不用,請使用系統功能調用,自己編寫繪圖功能,DOS下使用int86()函數實現功能調用。有,你可以參考:
支持SVGA的高解析度繪圖通過調用中斷 10h的4f功能來實現
主要解析度設置代碼
unsigned char set_SVGA_mode(int vmode)
{union REGS r;
r.x.ax=0x4f02;
r.x.bx=vmode;
int86(0x10,&r,&r);
return(r.h.ah);
}
void hide_text_cursor(void)
{union REGS r;
r.h.ah=1;
r.h.ch=32;
int86(0x10,&r,&r);
}
void selectpage(register char page)
{union REGS r;
r.x.ax=0x4f05;
r.x.bx=0;
r.x.dx=page;
int86(0x10,&r,&r);
}
void show_text_cursor(char size)
{union REGS r;
r.h.ah=1;
r.h.cl=size;
r.h.ch=7;
int86(0x10,&r,&r);
}
unsigned int get_SVGA_mode()
{union REGS r;
r.x.ax=0x4f03;
int86(0x10,&r,&r);
return(r.x.bx);
}
windows下本來就是圖形界面,隨便可以畫,有關的概念是:Canvas,brush,color等類/參數,DrawLine/DrawArc函數/方法。
❻ 用C語言繪制曲線
樓上的觀珠仔很久不見啦(挺掛念那段時光的)!想不到路過此地看到你,這是高科技呀?你還這么老班牙啊,大考小考把你弄糊塗了,高考順利呀!別忘了我這位老兄了,C語言略懂 ~~~~~~傑
1.繪制餘弦曲線
*程序說明與注釋
#include<stdio.h>
#include<math.h>
void main()
{
double y;
int x,m;
for(y=1;y>=-1;y-=0.1) /*y為列方向,值從1到-1,步長為0.1*/
{
m=acos(y)*10; /*計算出y對應的弧度m,乘以10為圖形放大倍數*/
for(x=1;x<m;x++) printf(" ");
printf("*"); /*控制列印左側的 * 號*/
for(;x<62-m;x++)printf(" ");
printf("*\n"); /*控制列印同一行中對稱的右側*號*/
}
}
*運行結果
2.繪制正弦曲線
在屏幕上用「*」顯示0-360度的餘弦函數sin(x)曲線。
1.
/**//*
sin() line.
62 of line width
*/
#include <stdio.h>
#include <math.h>
int main(void)
...{
int j ,k,d,h;
double i ;
for(i=1.0 ; i> 0.0; i-=0.1)
...{
k = (int)(asin(i)*10) ;
for(j=0; j< k ; j++) /**//*print the left */
printf(\" \");
printf(\"*\");
for( ; j< 31-k ; j++)
printf(\" \");