标题:帮忙呀,距阵问题
只看楼主
伤心的我
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2008-5-24
 问题点数:0 回复次数:6 
帮忙呀,距阵问题
有一个3*3的距阵,其中X代表未知数,从2,4,6,8中选一个数代替X,使其行,列,对角线三数之和都为15     。
想了好久都搞不清思路,谁来帮我一下,谢谢
x      1         x
3      5        7
x       9       x
搜索更多相关主题的帖子: 之和 未知数 对角线 思路 
2008-05-26 13:46
miaohg
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-5-25
得分:0 
你出的题目有问题!!!
2008-05-26 13:56
伤心的我
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2008-5-24
得分:0 
哦,这是书上一个作业题,我想也是有问题了,都不等于十五,谢谢
2008-05-26 14:05
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
得分:0 
发一组用于3D骨骼动画的矩阵函数:
程序代码:
#include <math.h>
#include <string.h>
typedef struct 
{
    float x, y, z, w;
}vec4;

typedef float mat16[16];

void MatrixClear(mat16 matrix);
void MatrixCopy(mat16 dstmat, mat16 srcmat);
vec4 VectorMatrixMultiply(vec4 v, mat16 matrix);
void MatrixRotate(double angle, float x, float y, float z, mat16 matrix);
void MatrixProduct(mat16 dstmat, mat16 srcmat, mat16 m);
void MatrixTranslate(mat16 matrix, float x, float y, float z);
void MatrixZero(mat16 matrix);
vec4 VectorProduct(vec4 v1, vec4 v2);

void MatrixClear(mat16 matrix)
{
    matrix[0]  = 1.0f; matrix[1]  = 0.0f; matrix[2]  = 0.0f; matrix[3]  = 0.0f;
    matrix[4]  = 0.0f; matrix[5]  = 1.0f; matrix[6]  = 0.0f; matrix[7]  = 0.0f;
    matrix[8]  = 0.0f; matrix[9]  = 0.0f; matrix[10] = 1.0f; matrix[11] = 0.0f;
    matrix[12] = 0.0f; matrix[13] = 0.0f; matrix[14] = 0.0f; matrix[15] = 1.0f;
}

void MatrixCopy(mat16 dstmat, mat16 srcmat)
{
    dstmat[0]    = srcmat[0];
    dstmat[1]    = srcmat[1];
    dstmat[2]    = srcmat[2];
    dstmat[3]    = srcmat[3];
    dstmat[4]    = srcmat[4];
    dstmat[5]    = srcmat[5];
    dstmat[6]    = srcmat[6];
    dstmat[7]    = srcmat[7];
    dstmat[8]    = srcmat[8];
    dstmat[9]    = srcmat[9];
    dstmat[10]    = srcmat[10];
    dstmat[11]    = srcmat[11];
    dstmat[12]    = srcmat[12];
    dstmat[13]    = srcmat[13];
    dstmat[14]    = srcmat[14];
    dstmat[15]    = srcmat[15];
}

vec4 VectorMatrixMultiply(vec4 v, mat16 matrix)
{
    vec4 out;

    out.x = (v.x * matrix[0]) + (v.y * matrix[4]) + (v.z * matrix[8]) + matrix[12];
    out.y = (v.x * matrix[1]) + (v.y * matrix[5]) + (v.z * matrix[9]) + matrix[13];
    out.z = (v.x * matrix[2]) + (v.y * matrix[6]) + (v.z * matrix[10]) + matrix[14];

    return out;
}

void MatrixRotate(double angle, float x, float y, float z, mat16 matrix)
{
    float sine = (float)sin(angle);
    float cosine = (float)cos(angle);
    
    float sinAngle = (float)sin(3.14 * angle / 180);
    float cosAngle = (float)cos(3.14 * angle / 180);
    float oneSubCos = 1.0f - cosAngle;
    
    matrix[0] = (x * x) * oneSubCos + cosAngle;
    matrix[4] = (x * y) * oneSubCos - (z * sinAngle);
    matrix[8] = (x * z) * oneSubCos + (y * sinAngle);
    
    matrix[1] = (y * x) * oneSubCos + (sinAngle * z);
    matrix[5] = (y * y) * oneSubCos + cosAngle;
    matrix[9] = (y * z) * oneSubCos - (x * sinAngle);
    
    matrix[2] = (z * x) * oneSubCos - (y * sinAngle);
    matrix[6] = (z * y) * oneSubCos + (x * sinAngle);
    matrix[10] = (z * z) * oneSubCos + cosAngle;
}

void MatrixProduct(mat16 dstmat, mat16 srcmat, mat16 m)
{
    // Return the value of this vector * m.
    mat16 newMatrix;
    const float *m1 = srcmat, *m2 = m;
    
    newMatrix[0] = m1[0] * m2[0] + m1[4] * m2[1] + m1[8] * m2[2];
    newMatrix[1] = m1[1] * m2[0] + m1[5] * m2[1] + m1[9] * m2[2];
    newMatrix[2] = m1[2] * m2[0] + m1[6] * m2[1] + m1[10] * m2[2];
    newMatrix[3] = 0;
    
    newMatrix[4] = m1[0] * m2[4] + m1[4] * m2[5] + m1[8] * m2[6];
    newMatrix[5] = m1[1] * m2[4] + m1[5] * m2[5] + m1[9] * m2[6];
    newMatrix[6] = m1[2] * m2[4] + m1[6] * m2[5] + m1[10] * m2[6];
    newMatrix[7] = 0;
    
    newMatrix[8] = m1[0] * m2[8] + m1[4] * m2[9] + m1[8] * m2[10];
    newMatrix[9] = m1[1] * m2[8] + m1[5] * m2[9] + m1[9] * m2[10];
    newMatrix[10] = m1[2] * m2[8] + m1[6] * m2[9] + m1[10] * m2[10];
    newMatrix[11] = 0;
    
    newMatrix[12] = m1[0] * m2[12] + m1[4] * m2[13] + m1[8] * m2[14] + m1[12];
    newMatrix[13] = m1[1] * m2[12] + m1[5] * m2[13] + m1[9] * m2[14] + m1[13];
    newMatrix[14] = m1[2] * m2[12] + m1[6] * m2[13] + m1[10] * m2[14] + m1[14];
    newMatrix[15] = 1;

    memcpy(dstmat, newMatrix, sizeof(mat16));
}

void MatrixTranslate(mat16 matrix, float x, float y, float z)
{
    // To translate a 4x4 matrix you must replace the bottom row values.  The first
    // which is matrix[12] is for x, [13] is the y, and so on.  The last one is set to 1.0.
    matrix[12] = x;
    matrix[13] = y;
    matrix[14] = z;
    matrix[15] = 1.0f;
}

void MatrixZero(mat16 matrix)
{
    // To set the matrix to zero you set all the values in the matrix like so...
    matrix[0]  = 0.0f; matrix[1]  = 0.0f; matrix[2]  = 0.0f; matrix[3]  = 0.0f;
    matrix[4]  = 0.0f; matrix[5]  = 0.0f; matrix[6]  = 0.0f; matrix[7]  = 0.0f;
    matrix[8]  = 0.0f; matrix[9]  = 0.0f; matrix[10] = 0.0f; matrix[11] = 0.0f;
    matrix[12] = 0.0f; matrix[13] = 0.0f; matrix[14] = 0.0f; matrix[15] = 0.0f;
}

vec4 VectorProduct(vec4 v1, vec4 v2)
{
    vec4 ret;
    ret.x = v1.x * v2.x;
    ret.y = v1.y * v2.y;
    ret.z = v1.z * v2.z;

    return ret;
}


[[it] 本帖最后由 flyue 于 2008-5-27 13:57 编辑 [/it]]

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-05-26 17:23
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
得分:0 
哇……好叹为观止的代码……话说这种代码其实用汇编更合适……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-27 00:18
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
得分:0 
用这组代码,做OpenGL的骨骼动画就足够了

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-05-27 13:57
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
得分:0 
?精灵动画编辑器??

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-27 17:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-215983-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.415496 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved