免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: skychongrichie
打印 上一主题 下一主题

[算法] 游戏开发中常用的2d和3d图形算法有哪些 [复制链接]

论坛徽章:
5
寅虎
日期:2014-01-01 12:56:09未羊
日期:2014-01-02 17:57:59未羊
日期:2014-01-05 10:18:05双子座
日期:2014-01-05 13:04:07双鱼座
日期:2014-01-10 17:40:33
11 [报告]
发表于 2014-01-06 22:58 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
11
巨蟹座
日期:2013-12-23 11:12:14双子座
日期:2014-08-28 09:14:55子鼠
日期:2014-07-25 16:21:22摩羯座
日期:2014-07-23 15:17:47摩羯座
日期:2014-05-30 13:09:05午马
日期:2014-04-30 18:10:00天秤座
日期:2014-04-25 12:12:00申猴
日期:2014-04-22 11:30:15午马
日期:2014-03-07 16:06:40辰龙
日期:2013-12-25 18:36:00摩羯座
日期:2014-09-02 17:00:55
12 [报告]
发表于 2014-01-07 07:07 |只看该作者
本帖最后由 Susake_ 于 2014-01-08 13:56 编辑
skychongrichie 发表于 2014-01-06 22:20
回复 7# BlueGuy_ 你高中生啊?这么牛?当年我高中的时候连c++是啥都不知道,见笑了哈。言归正传,我还没用 ...

STL中就有一个next_permutation

  1. #include <iostream>   
  2. #include <algorithm>  
  3. using namespace std;

  4. int main(int argc, char *argv[])
  5. {
  6.         int array_n[] = {1, 2, 3};

  7.         sort(array_n, array_n + 3);

  8.         do
  9.         {
  10.                 cout << array_n[0] << " " << array_n[1] << " " << array_n[2] << endl;
  11.         }
  12.         while(next_permutation(array_n, array_n + 3));

  13.         return 0;
  14. }
复制代码

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
13 [报告]
发表于 2014-01-07 19:31 |只看该作者
回复 12# Susake_


    next_permutation 不是 dfs 的, 是通过找到 下降位置, 交换, 逆序 做的. 再说, qsort 什么的也有现成的, 不过这种问题, 自己还是撸过一遍比较好.

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
14 [报告]
发表于 2014-01-07 19:40 |只看该作者
回复 6# BlueGuy_

    大侠, 麻烦给看看是不是这个啊.

    这个好像是排列的, 大侠给个组合的嘛.
  1. #include <stdio.h>

  2. #define LEN        10

  3. // index: 记录下标
  4. // mark:  记录是否选取过
  5. // a: 要排列的数组
  6. // n: 数组中元素个数
  7. // m: 要从 n 个元素中选多少个
  8. // depth: 递归深度
  9. void perm_dfs(int index[], int mark[], int a[], int n, int m, int depth)
  10. {
  11.         int i;

  12.         if (depth == m)
  13.         {
  14.                 for (i = 0; i < m; i++)       
  15.                         printf("%d ", a[index[i]]);       
  16.                 putchar('\n');
  17.         }
  18.         else
  19.         {
  20.                 for (i = 0; i < n; i++)       
  21.                 {
  22.                         if (0 == mark[i])
  23.                         {
  24.                                 index[depth] = i;       
  25.                                 mark[i] = 1;

  26.                                 perm_dfs(index, mark, a, n, m, depth + 1);

  27.                                 mark[i] = 0;
  28.                         }
  29.                 }
  30.         }
  31. }

  32. int main(void)
  33. {
  34.         int index[LEN], mark[LEN] = { };
  35.         int a[LEN] = { 4, 6, 8, 9 };
  36.         perm_dfs(index, mark, a, 4, 4, 0);

  37.         return 0;
  38. }
复制代码

论坛徽章:
5
寅虎
日期:2014-01-01 12:56:09未羊
日期:2014-01-02 17:57:59未羊
日期:2014-01-05 10:18:05双子座
日期:2014-01-05 13:04:07双鱼座
日期:2014-01-10 17:40:33
15 [报告]
发表于 2014-01-07 19:41 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
5
寅虎
日期:2014-01-01 12:56:09未羊
日期:2014-01-02 17:57:59未羊
日期:2014-01-05 10:18:05双子座
日期:2014-01-05 13:04:07双鱼座
日期:2014-01-10 17:40:33
16 [报告]
发表于 2014-01-07 19:42 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
17 [报告]
发表于 2014-01-07 19:44 |只看该作者
回复 16# BlueGuy_


    哦, 是这个吗, 这个原创是你不
  1. #include <stdio.h>

  2. #define MAX 100

  3. // a: 存放候选数字
  4. // n: 总项数
  5. // m: 取出项数
  6. // b: 存放选出结果
  7. // M = m
  8. void combine(int a[], int n, int m, int b[], int M)
  9. {
  10.         int i, j;

  11.         for (i = n; i >= m; i--)
  12.         {
  13.                 b[m - 1] = i - 1;       
  14.                 if (m > 1)
  15.                         combine(a, i - 1, m - 1, b, M);
  16.                 else
  17.                 {
  18.                         for (j = M - 1; j >= 0; j--)       
  19.                                 printf("%d ", a[b[j]]);
  20.                         putchar('\n');
  21.                 }
  22.         }
  23. }

  24. int main(void)
  25. {
  26.         int i;
  27.         int a[MAX], b[MAX];

  28.         for (i = 0; i < 100; i++)
  29.                 a[i - 1] = i;

  30.         combine(a, 5, 4, b, 4);

  31.         return 0;
  32. }
复制代码

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
18 [报告]
发表于 2014-01-07 19:45 |只看该作者
回复 16# BlueGuy_


    我会写象棋, 大侠收了我吧.

论坛徽章:
5
寅虎
日期:2014-01-01 12:56:09未羊
日期:2014-01-02 17:57:59未羊
日期:2014-01-05 10:18:05双子座
日期:2014-01-05 13:04:07双鱼座
日期:2014-01-10 17:40:33
19 [报告]
发表于 2014-01-07 19:48 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
5
寅虎
日期:2014-01-01 12:56:09未羊
日期:2014-01-02 17:57:59未羊
日期:2014-01-05 10:18:05双子座
日期:2014-01-05 13:04:07双鱼座
日期:2014-01-10 17:40:33
20 [报告]
发表于 2014-01-07 19:50 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP