91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么利用C語言輸出3D立體感心形圖

發布時間:2021-12-13 09:02:26 來源:億速云 閱讀:238 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么利用C語言輸出3D立體感心形圖”,在日常操作中,相信很多人在怎么利用C語言輸出3D立體感心形圖問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么利用C語言輸出3D立體感心形圖”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

首先我先在每行(除空白以及{}外)代碼上標上序號(無序號源碼放在了文末)

#include <stdio.h>
#include <math.h>

float f(float x, float y, float z) 
{
    float a = x*x + 9.0f/4.0f*y*y + z*z - 1;
    return a*a*a - x*x*z*z*z - 9.0f/80.0f*y*y*z*z*z;
}

float h(float x, float z) 
{
    for (float y = 1.0f; y >= 0.0f; y -= 0.001f)
    {
        if (f(x, y, z) <= 0.0f)
            return y;
    }
    return 0.0f;
}

int main() 
{
    for (float z = 1.5f; z > -1.5f; z -= 0.1f) 
    {
        for (float x = -1.5f; x < 1.5f; x += 0.05f) 
        {
            float v = f(x, 0.0f, z);
            if (v <= 0.0f) 
            {
                float y0 = h(x, z);
                float ny = 0.01f;
                float nx = h(x + ny, z) - y0;
                float nz = h(x, z + ny) - y0;
                float nd = 1.0f / sqrtf(nx*nx + ny*ny + nz*nz);
                float d = (nx + ny - nz)*nd*0.5f + 0.5f;
                putchar(".:-=+*#%@"[(int)(d * 5.0f)]);
            }
            else
                putchar(' ');
        }
        putchar('\n');
    }
    return 0;
}

此次空白行以及語句塊{}空白花括號就不再多加贅述,簡要來說,就是為了整體的完整性與可讀性。

首先先說一下數值后面加f的問題,例如: y=1.0f 1.0后面的f用于強調前面的1.0是一個float量。 如果不加,默認為double,加了之后,賦值給y時會自動轉換為float 的。

逐行分析(除空白以及{}空白行外):

★頭文件部分:

1.頭文件的定義,可以說是老朋友了,stdio頭文件,非常常用的頭文件。

2.math頭文件,看到math,我們應該會想起數學這個名字,其實沒錯,math.h頭文件定義了各種數學函數和一個宏。此處定義這個頭文件的原因就是用到了數學函數sqrtf。

★主函數外自定義函數部分:

3.定義了一個float類型的函數f,有三個float類型的形參x,y,z。

4.定義了一個float類型的變量a,將其賦值為x * x + 9.0f / 4.0f* y * y + z * z - 1;

5.返回一個表達式的值:return a *a * a - x * x * z * z * z - 9.0f/80.0f * y * y * z * z * z;

有關4和5的解釋:這其實跟上一次平面心形圖方程類型,只不過增加到了第三維度,此處為立體感心形方程:

x * x + 9.0f / 4.0f* y * y + z * z - 1;

return a *a * a - x * x * z * z * z - 9.0f/80.0f * y * y * z * z * z;

6.定義了一個float類型的函數h,有兩個float類型的形參x,z。

7.float定義y=1.0f,1.0后面的f用于強調前面的1.0是一個float量。 如果不加,默認為double,加了之后,賦值給y時會自動轉換為float 的。

y>=0.0f 判斷條件;

z-=0.1f; 也就是z=z-0.1f; 可以類比i-=2; 即 i=i-2;

8.if (f(x, y, z) <= 0.0f)條件判斷,調用函數f傳參x,y,z看函數返回值是否小于等于0,如果小于,說明y的值就對了,返回y的值到主函數。

9.見8.

10.return返回0.0f表示結束了該函數的執行。

★主函數部分:

11.主函數的定義。

12.見7.分析

ps:12和13不再多加闡述,和7道理相同。

13.見7.分析

14.float定義了一個v變量,接收了y=0.0f即y為定值時函數f的返回值。

15.條件判斷,看函數返回的v值是否小于等于0,如果小于等于0,則執行語句塊內容,輸出所設定字符。

16.由15可知,15成立則進入語句16的執行,此處定義變量y0來接收返回值。

17.定義浮點型變量ny,并給它賦值為0.01f。

18.float nx = h(x + ny, z) - y0; 經h函數返回之后相當于,nx=y(x變化)-y0;

19.float nz = h(x, z + ny) - y0; 經h函數返回之后相當于,nz=y(z變化)-y0;

20.float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz); 這里的nd的值就相當于(x * x+y * y+z * z)開方再取倒數。

21.float d = (nx + ny - nz) * nd * 0.5f + 0.5f; d值相當于 d=(x+y-z)*1.0f/sqrtf(x * x+y * y+z * z)+0.5f。

22.putchar(".:-=+*#%@"[(int)(d * 5.0f)]); 輸出所設定字符,更好地呈現出立體感心形。

關于17——22這些都是為了更好的呈現立體感圖形所寫,關聯到輸出的位置,輸出的形狀等多個方面,可以說,是立體感心形代碼中核心代碼之一(而且是很關鍵的)。

23.if else中else否則部分;

24.如果執行else語句,則輸出空白;

25.輸出換行;

26.return 0; return語句結束main()函數的執行,把0返還給操作系統。

無序號源碼:

#include <stdio.h>
#include <math.h>

float f(float x, float y, float z) 
{
    float a = x*x + 9.0f/4.0f*y*y + z*z - 1;
    return a*a*a - x*x*z*z*z - 9.0f/80.0f*y*y*z*z*z;
}

float h(float x, float z) 
{
    for (float y = 1.0f; y >= 0.0f; y -= 0.001f)
    {
        if (f(x, y, z) <= 0.0f)
            return y;
    }
    return 0.0f;
}

int main() 
{
    for (float z = 1.5f; z > -1.5f; z -= 0.1f) 
    {
        for (float x = -1.5f; x < 1.5f; x += 0.05f) 
        {
            float v = f(x, 0.0f, z);
            if (v <= 0.0f) 
            {
                float y0 = h(x, z);
                float ny = 0.01f;
                float nx = h(x + ny, z) - y0;
                float nz = h(x, z + ny) - y0;
                float nd = 1.0f / sqrtf(nx*nx + ny*ny + nz*nz);
                float d = (nx + ny - nz)*nd*0.5f + 0.5f;
                putchar(".:-=+*#%@"[(int)(d * 5.0f)]);
            }
            else
                putchar(' ');
        }
        putchar('\n');
    }
}

到此,關于“怎么利用C語言輸出3D立體感心形圖”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扎赉特旗| 咸丰县| 江北区| 仁怀市| 太湖县| 安庆市| 南京市| 江西省| 临海市| 五常市| 兴隆县| 南溪县| 昂仁县| 利辛县| 垣曲县| 蓬安县| 宁明县| 固安县| 灌阳县| 汽车| 三门县| 若羌县| 卫辉市| 横山县| 济源市| 从江县| 黔东| 德钦县| 铜川市| 涞源县| 徐水县| 育儿| 石棉县| 临澧县| 舒城县| 顺平县| 民丰县| 新宁县| 抚顺市| 舞钢市| 馆陶县|