游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4713|回复: 16

各位好朋友。进来帮忙了。把这段代码弄高深一点(越高

[复制链接]

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
发表于 2007-3-30 17:24:00 | 显示全部楼层 |阅读模式
因为单位不许我用pascal写链接库,只好c++了。我的目的是不让别人乱改算法思想,而c++我毕竟谈不上精通,请大家来帮帮忙哈。
vc++中创建一个控制台应用即可编译通过,bezier curves的算法核心

#include "stdafx.h"
#include <string.h>
#include <math.h>
#include <stdio.h>
//
using namespace std;

struct TFlyMovementVector
{
        float x,y,z;
};

#define TInputVector TFlyMovementVector
#define TArrayInputVector TInputVector *
struct TArrayInputVectorData
{
        TArrayInputVector Input;
        int InputLen;
};
//
#define TOutputVector TFlyMovementVector
#define TArrayOutputVector TOutputVector *
struct TArrayOutputVectorData
{
        TArrayOutputVector Output;
        int OutputLen;
};

float Factorial(int n)
{
        float r=1;
        for(int i=2;i<=n;i++) r=r*i;
        return r;
}

#define power powf

float BernsteinBasis(int n,int i,float t)
{
        float ti,tni;
        if((t==0)&&(i==0)) ti=1; else ti=power((float)t,(float)i);
        if((n==i)&&(t==1)) tni=1; else tni=power((float)(1-t),(float)(n-i));
        return ((Factorial(n)/(Factorial(i)*Factorial(n-i)))*ti*tni);
}

TOutputVector BezierCurvePoint(float t, TArrayInputVectorData _id)
{
        TOutputVector r={0,0,0};
        float b;
        for(int i=0;i<=(_id.InputLen-1);i++)
        {
                b=BernsteinBasis(_id.InputLen-1,i,t);
                r.x=r.x+(_id.Input.x*b);
                r.y=r.y+(_id.Input.y*b);
                r.z=r.z+(_id.Input.z*b);
        }
        return r;
}

TArrayOutputVectorData GenerateBezierCurve(int Steps, TArrayInputVectorData _id)
{
        TArrayOutputVectorData _od={new TOutputVector[Steps],Steps};
        for (int i=0;i<=Steps-1;i++) _od.Output=BezierCurvePoint(i/(float)(Steps-1), _id);
        return _od;
}

float sqr(float v)
{
        return power(v,2);
}

float VectorDistance(TOutputVector v1, TOutputVector v2)
{
        return sqrt(sqr(v2.x-v1.x)+sqr(v2.y-v1.y)+sqr(v2.z-v1.z));
}

TOutputVector VectorLerp(TOutputVector v1, TOutputVector v2, float t)
{
        TOutputVector _R={v1.x+(v2.x-v1.x)*t, _R.y=v1.y+(v2.y-v1.y)*t, _R.z=v1.x+(v2.z-v1.z)*t};
        return _R;
}

TOutputVector CalcTrackFromTime(float speed, double NewTime, TArrayOutputVectorData _od)
{
        TOutputVector v={0,0,0};
        float NewDistance=NewTime*speed;
        float CurDistance=0;
        float nDistance=0;
        //
        if(_od.OutputLen>0)
        {
                v=_od.Output[0];
                for(int i=1;i<=_od.OutputLen-1;i++)
                {
                        nDistance=VectorDistance(v, _od.Output);
                        if (CurDistance+nDistance>=NewDistance)
                                return VectorLerp(v, _od.Output, (CurDistance+nDistance-NewDistance)/nDistance);
                        CurDistance+=nDistance;
                        v=_od.Output;
                }
        }
        return v;
}

//test it.
int _tmain(int argc, _TCHAR* argv[])
{
        TArrayInputVectorData _id={new TInputVector[4], 4};
        _id.Input[0].x=(float)1.55;
        _id.Input[0].y=(float)3.14;
        _id.Input[0].z=(float)-18.01;

        _id.Input[1].x=(float)10.55;
        _id.Input[1].y=(float)33.1;
        _id.Input[1].z=(float)8.07;

        _id.Input[2].x=(float)-80.5;
        _id.Input[2].y=(float)-13.1;
        _id.Input[2].z=(float)1.07;
        //
        cout<<"bezier curves test"<<endl;
        TArrayOutputVectorData _od=GenerateBezierCurve(10, _id);
        TOutputVector v={0,0,0};
        for (int i=0;i<=_od.OutputLen-1;i++)
        {
                v=_od.Output;
                cout<<"X:"<<v.x<<" Y:"<<v.y<<" Z:"<<v.z<<endl;
        }
        //
        cout<<"fly track movement test"<<endl;
        v=CalcTrackFromTime(5.0, 2, _od);
        cout<<"X:"<<v.x<<" Y:"<<v.y<<" Z:"<<v.z<<endl;
        return 0;
}

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
 楼主| 发表于 2007-3-30 17:26:00 | 显示全部楼层

Re: 各位好朋友。进来帮忙了。把这段代码弄高深一点(越

code here,download it.

sf_200733017265.rar

8.6 KB, 下载次数:

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
 楼主| 发表于 2007-3-30 17:28:00 | 显示全部楼层

Re:各位好朋友。进来帮忙了。把这段代码弄高深一点(越

星期一我来收货。

我提供一些独家游戏资源作为回报。包你满意。咔咔。

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
 楼主| 发表于 2007-3-30 17:35:00 | 显示全部楼层

Re: 各位好朋友。进来帮忙了。把这段代码弄高深一点(越

sf_2007330173528.jpg

3

主题

37

帖子

37

积分

注册会员

Rank: 2

积分
37
发表于 2007-3-30 17:56:00 | 显示全部楼层

Re:各位好朋友。进来帮忙了。把这段代码弄高深一点(越

用反汇编的工具得到的代码,变量过程名都是a,b,c,d,显得巨高深。

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2007-3-30 17:57:00 | 显示全部楼层

Re:各位好朋友。进来帮忙了。把这段代码弄高深一点(越

有种东西叫做:代码混淆器
就像是VC自带的PJ那一版的STL
试问第一眼看上去它是那么的零乱
这么没有可读性的代码怎么会是由一家专业的公司编写的而且MS还会选中它做为自带的STL呢

因为STL的源码必须公开,而不能以LIB形式发放
所以PJ在发布前,运用工具对它进行了代码混淆
一定程度上就保护了它的商业利益

简单来说
我们自己也可以写个这样的程序
回想一下初学编程时候的不良习惯
这个时候可以重温一下并把它们发扬光大
比如,把所有的变量都改成是_X_1,_X_2……这样无意义的不容易记的名称
而函数名称同样,全替换成只要是唯一的但毫无意义的即可
说白了就是一个预处理器
就是define而已

这样做不会影响任何使用

25

主题

304

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
发表于 2007-3-30 18:19:00 | 显示全部楼层

Re:各位好朋友。进来帮忙了。把这段代码弄高深一点(越

这个.....
#define BEGIN {
#define END }
#define IF  if(
#define THEN ){
#define ENDIF }
#define ELSE }else{
#define procedure void

procedure Test()
BEGIN
  IF xxxxx THEN
      xxxxx
  ELSE
      xxxxx
  ENDIF
END

44

主题

248

帖子

274

积分

中级会员

Rank: 3Rank: 3

积分
274
发表于 2007-3-30 21:39:00 | 显示全部楼层

Re:各位好朋友。进来帮忙了。把这段代码弄高深一点(越

提几个意见把

1 a[1]=0 之类的代码  都换成 1[a]=0这样的操作
2 滥用下划线
3 滥用宏定义
4 magic number 满天飞
5 函数调用全部使用函数指针
6 函数名称和变量无意义

18

主题

135

帖子

143

积分

注册会员

Rank: 2

积分
143
发表于 2007-3-30 23:58:00 | 显示全部楼层

Re: Re:各位好朋友。进来帮忙了。把这段代码弄高深一点

千里马肝: Re:各位好朋友。进来帮忙了。把这段代码弄高深一点(越高深越好,最好都看不懂,但是拒绝汇编)

有种东西叫做:代码混淆器
就像是VC自带的PJ那一版的STL
试问第一眼看上去它是那么的零乱
这么没有可读性...

我觉得还不错啊

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2007-3-31 17:05:00 | 显示全部楼层

Re: Re:各位好朋友。进来帮忙了。把这段代码弄高深一点

谜の名侦探: Re:各位好朋友。进来帮忙了。把这段代码弄高深一点(越高深越好,最好都看不懂,但是拒绝汇编)

这个.....
#define BEGIN {
#define END }
#define IF  if(
#define THEN ){
#define ENDIF }
#defin...


收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-4-12 15:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表