C語(yǔ)言繪制余弦、正弦曲線
繪制余弦曲線
要求:在屏幕上用“*”(星號(hào))顯示0°~360°的余弦函數(shù)cos(x)曲線。(不使用數(shù)組)
問(wèn)題分析與算法設(shè)計(jì)
對(duì)一般的顯示器來(lái)說(shuō),只能按行輸出,即:輸出第一行信息后,想能向下一行輸出,不能再返回到上一行。為了獲得一個(gè)周期(0°~360°)的余弦函數(shù)圖形,j就必須在一行中一次輸出兩個(gè)“*”。
為了同時(shí)得到余弦函數(shù)cos(x)圖形在一行上的兩個(gè)點(diǎn),考慮利用cos(x)的左右對(duì)稱性。將屏幕行方向定義為x,列方向定義為y。若定義圖形的總寬度為62行,計(jì)算出x行0°~180°時(shí)y點(diǎn)坐標(biāo)m,那么在同一行與之對(duì)稱的180°~360°的y點(diǎn)坐標(biāo)就應(yīng)為62-m。程序中利用反余弦函數(shù)acos計(jì)算坐標(biāo)(x,y)的對(duì)用關(guān)系。
程序說(shuō)明與注釋
/****************繪制0~2PI區(qū)間內(nèi)的余弦曲線****************/
/***********編者:董炳政******編寫時(shí)間2018/07/20**********/
/*******************************************************/
#include <stdio.h>
#include <math.h>
int main()
{
double y; /*縱坐標(biāo)y*/
int x,m; /*橫坐標(biāo)x*/
for(y = 1;y >= -1;y -= 0.1) /*縱軸y從1~-1,步長(zhǎng)為0.1*/
{
m=acos(y)*10; /*利用math.h中的反余弦函數(shù),求對(duì)應(yīng)橫坐標(biāo)的值,此時(shí)m為int型變量*/
for(x = 1;x < m;x++) /*開(kāi)始逐行打點(diǎn)*/
printf(" "); /*在曲線定點(diǎn)右側(cè),打印空格*/
printf("*"); /*第一個(gè)曲線定點(diǎn)打印“*”*/
for(;x < 62-m;x++) /*開(kāi)始打印對(duì)稱曲線定點(diǎn),由于對(duì)稱性x的終值為62-m*/
printf(" "); /*在兩定點(diǎn)之間打印空格*/
printf("*\n"); /*第二個(gè)曲線定點(diǎn)打印“*”,并換行*/
}
return 0;
}
運(yùn)行結(jié)果:
[root@localhost 1_drawingcos]# ./drawingcos
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
**
繪制正弦曲線
在已經(jīng)會(huì)繪制余弦曲線的基礎(chǔ)上,我們來(lái)進(jìn)一步探索如何利用C語(yǔ)言繪制正弦函數(shù)。
問(wèn)題分析:
很自然的,我們想到將acos(y)換成asin(y),不就可以把畫余弦函數(shù)換成畫正弦函數(shù)了嗎??墒牵聦?shí)并沒(méi)有那么簡(jiǎn)單。首先,0°~360°的正弦函數(shù)并不是一個(gè)簡(jiǎn)單的左右對(duì)稱的圖形;其次,反三角函數(shù)x=asin(y)的值域?yàn)?-π/2,π/2),所以并不能通過(guò)簡(jiǎn)單的求反三角函數(shù)值計(jì)算出(π,2π)這一段圖形的橫坐標(biāo)。
這里提供一種方法。我們可以通過(guò)計(jì)算asin(y)來(lái)得到(0,π/2)這一段圖形的橫坐標(biāo);利用(0,π/2)的圖形和(π/2,π)關(guān)于x=π/2軸對(duì)稱,來(lái)得到(π/2,π)這一段圖形的橫坐標(biāo);通過(guò)計(jì)算π+asin(-y)的值,來(lái)得到(π,2π)這一段圖形的橫坐標(biāo)。
/****************繪制0~2PI區(qū)間內(nèi)的弦曲線****************/
/***********編者:董炳政******編寫時(shí)間2018/07/20**********/
/*******************************************************/
#include <stdio.h>
#include <math.h>
#define PI 3.14159
int main()
{
double y; /*縱坐標(biāo)y*/
int x,m; /*橫坐標(biāo)x*/
for(y = 1;y >= 0;y -= 0.1) /*先求0~PI,縱軸y從1~0,步長(zhǎng)為0.1*/
{
m=asin(y)*10; /*利用math.h中的反正弦函數(shù),求對(duì)應(yīng)橫坐標(biāo)的值,此時(shí)m為int型變量*/
for(x = 1;x < m;x++) /*開(kāi)始逐行打點(diǎn)*/
printf(" "); /*在曲線定點(diǎn)右側(cè),打印空格*/
printf("*"); /*第一個(gè)曲線定點(diǎn)打印“*”*/
for(;x < 31-m;x++) /*開(kāi)始打印對(duì)稱曲線定點(diǎn),由于0~PI的對(duì)稱性x的終值為31-m*/
printf(" "); /*在兩定點(diǎn)之間打印空格*/
printf("*\n"); /*第二個(gè)曲線定點(diǎn)打印“*”,并換行*/
}
for(y -= 0.1;y >= -1;y -= 0.1)
{
m=(PI+asin(-y))*10;
for(x=1;x<m;x++)
printf(" ");
printf("*\n");
for(;x<(62-(m-31));x++)
printf(" ");
printf("*\n");
}
return 0;
}
運(yùn)行結(jié)果:
[root@localhost 1_drawingcos]# ./drawingsin
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
**
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Opencv?視頻讀取與寫入的實(shí)現(xiàn)示例
本文將介紹如何使用OpenCV進(jìn)行視頻讀寫。通過(guò)閱讀本文,您將了解如何讀取視頻文件、處理視頻幀、寫入視頻文件等操作,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
C++?ASIO實(shí)現(xiàn)異步套接字管理詳解
Boost?ASIO(Asynchronous?I/O)是一個(gè)用于異步I/O操作的C++庫(kù),該框架提供了一種方便的方式來(lái)處理網(wǎng)絡(luò)通信、多線程編程和異步操作,本文介紹了如何通過(guò)ASIO框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的異步網(wǎng)絡(luò)套接字應(yīng)用程序,需要的可以參考下2023-08-08
SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
這篇文章主要介紹了使用SublimeText編譯C代碼的開(kāi)發(fā)環(huán)境設(shè)置,大家參考使用2013-11-11
windows上安裝CLion教程及簡(jiǎn)單使用詳解
這篇文章主要介紹了windows上安裝CLion教程及簡(jiǎn)單使用,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08

