圣诞树代码差最后一哆嗦 在线等

http://img4.mukewang.com/5a40d5350001e09c08830645.jpg

#include <math.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


#define PI 3.14159265359f


float sx, sy;


typedef float Mat[4][4];

typedef float Vec[4];


void scale(Mat* m, float s) {

    Mat temp = { {s,0,0,0}, {0,s,0,0 }, { 0,0,s,0 }, { 0,0,0,1 } };

    memcpy(m, &temp, sizeof(Mat));

}


void rotateY(Mat* m, float t) {

    float c = cosf(t), s = sinf(t);

    Mat temp = { {c,0,s,0}, {0,1,0,0}, {-s,0,c,0}, {0,0,0,1} };

    memcpy(m, &temp, sizeof(Mat));

}


void rotateZ(Mat* m, float t) {

    float c = cosf(t), s = sinf(t);

    Mat temp = { {c,-s,0,0}, {s,c,0,0}, {0,0,1,0}, {0,0,0,1} };

    memcpy(m, &temp, sizeof(Mat));

}


void translate(Mat* m, float x, float y, float z) {

    Mat temp = { {1,0,0,x}, {0,1,0,y}, {0,0,1,z}, {0,0,0,1} };

    memcpy(m, &temp, sizeof(Mat));

}


void mul(Mat* m, Mat a, Mat b) {

    Mat temp;

    for (int j = 0; j < 4; j++)

        for (int i = 0; i < 4; i++) {

            temp[j][i] = 0.0f;

            for (int k = 0; k < 4; k++)

                temp[j][i] += a[j][k] * b[k][i];

        }

    memcpy(m, &temp, sizeof(Mat));    

}


void transformPosition(Vec* r, Mat m, Vec v) {

    Vec temp = { 0, 0, 0, 0 };

    for (int j = 0; j < 4; j++)

        for (int i = 0; i < 4; i++)

            temp[j] += m[j][i] * v[i];

    memcpy(r, &temp, sizeof(Vec));    

}


float transformLength(Mat m, float r) {

    return sqrtf(m[0][0] * m[0][0] + m[0][1] * m[0][1] + m[0][2] * m[0][2]) * r;

}


float sphere(Vec c, float r) {

    float dx = c[0] - sx, dy = c[1] - sy;

    float a = dx * dx + dy * dy;

    return a < r * r ? sqrtf(r * r - a) + c[2] : -1.0f;

}


float opUnion(float z1, float z2) {

    return z1 > z2 ? z1 : z2;

}


float f(Mat m, int n) {

    // Culling

    {

        Vec v = { 0.0f, 0.5f, 0.0f, 1.0f };

        transformPosition(&v, m, v);        

        if (sphere(v, transformLength(m, 0.55f)) == -1.0f)

            return -1.0f;

    }


    float z = -1.0f;


    if (n == 0) { // Leaf

        Vec v = { 0.0f, 0.5f, 0.0f, 1.0f };

        transformPosition(&v, m, v);        

        z = sp;}


qq_锋峰烽疯_0
浏览 1199回答 1
1回答

qq_缘定三生石

什么圣诞树,是打印一个圣诞树的图形出来吗
打开App,查看更多内容
随时随地看视频慕课网APP