- 浏览: 389703 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (229)
- java编程 (4)
- java实用程序 (2)
- 算法设计 (34)
- 数据库 (8)
- ACM模板 (12)
- 技术术语 (1)
- java_web (3)
- php (22)
- eclipse (3)
- linux (25)
- linux命令使用心得 (3)
- web服务器 (8)
- IT知识 (2)
- 前端技术 (17)
- 开源软件 (5)
- vim (3)
- linux多线程 (9)
- web开发经验 (3)
- lua (5)
- linux编程 (3)
- smarty (1)
- mysql (4)
- Hive (2)
- 数据挖掘 (9)
- python (2)
- 生活 (1)
- C++ (2)
- 计算机 (1)
- objective-c (11)
- css (2)
- 游戏 (1)
- Mac (1)
最新评论
-
lr544463316:
我的怎么不行呀.....
Mysql Access denied for user ''@'localhost' to database 的一种解决方法 -
babaoqi:
使用时需要注意group_concat函数返回值的最大长度=g ...
mysql中的group_concat函数 -
代码能力弱成渣:
可以帮我看下我的代码么?我自己写的sam,也有ac过题的,但是 ...
求两个字符串的最长公共连续子序列(SAM实现) -
atgoingguoat:
有1000个?不过还是收藏下。
jquery常用的插件1000收集(转载)
source: http://acm.bupt.edu.cn/onlinejudge/newoj/showProblem/show_problem.php?problem_id=244
title: A Letter to Programmers
/* 坐标变换的公式+矩阵快速幂 */ #include <iostream> #include <cmath> using namespace std; const int N = 105; const double pi = acos(-1.0); const double eps = 1e-4; struct point{ double x, y, z; point(double _x=0, double _y=0, double _z=0):x(_x), y(_y), z(_z){}; void read(){ scanf("%lf%lf%lf", &x, &y, &z); } }; //三维点的变换矩阵,点做变换的时候是乘在矩阵的右边的,所以,后来的变换矩阵应该乘在 //原有矩阵的左边。 struct mat{ static const int N = 4; double v[N][N]; int n; mat(){ n = N; } void setv(double _v[N][N]){ int i, j; for(i = 0; i < N; i++){ for(j = 0; j < N; j++){ v[i][j] = _v[i][j]; } } } //点绕轴(0,0,0)->(x,y,z)旋转(旋转方向为从 点(x,y,z)往(0,0,0)) //看是逆时针方向.如果所绕的轴的一个端点不在原点,则可以移到端 //点再移回来 void rotate(double x, double y, double z, double ang){ double cosa = cos(ang), sina = sin(ang), len; len = sqrt(x*x+y*y+z*z); x/=len; y/=len; z/=len; double a[N][N] = { cosa+(1-cosa)*x*x, (1-cosa)*x*y-z*sina, (1-cosa)*x*z+y*sina, 0, (1-cosa)*x*y+z*sina, cosa+(1-cosa)*y*y, (1-cosa)*y*z-x*sina, 0, (1-cosa)*x*z-y*sina, (1-cosa)*y*z+x*sina, cosa+(1-cosa)*z*z, 0, 0, 0, 0, 1 }; setv(a); } //移动矩阵,点(x0,y0,z0)变为(x0+x,y0+y,z0+z) void translate(double x, double y, double z){ double a[N][N] = { 1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1 }; setv(a); } //伸缩矩阵,点(x0,y0,z0)变为(x0*x,y0*y,z0*y) void scale(double x, double y, double z){ double a[N][N] = { x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1 }; setv(a); } //对点st应用该矩阵 point change(point st){ double ds[N] = {st.x, st.y, st.z, 1}, ans[N-1]; int i, j; //点做矩阵变换的时候是点是乘在矩阵的右边的 for(i = 0; i < N-1; i++){ ans[i] = 0; for(j = 0; j < N; j++){ ans[i] += v[i][j] * ds[j]; } } return point(ans[0], ans[1], ans[2]); } //矩阵乘法 mat operator*(mat tm){ mat ans; int i, j, k; for(i = 0; i < n; i++){ for(j = 0; j < n; j++){ ans.v[i][j] = 0; for(k = 0; k < n; k++){ ans.v[i][j] += v[i][k] * tm.v[k][j]; } } } return ans; } //矩阵幂 mat operator^(int k){ mat ans, org = *this; ans.scale(1., 1., 1.); //初始化为单位矩阵 for(; k; k >>= 1, org = org * org){ if(k&1){ ans = ans * org; // ans = org * ans; } } return ans; } }; char ts[N]; //ts[i]为'm'表示矩阵,为'r'表示重复 mat ms[N]; int ks[N]; int main() { // freopen("in.txt", "r", stdin); int n, top, i, k; char op[20]; double tx, ty, tz, d; mat m; point tp; while(~scanf("%d", &n) && n > 0){ top=-1; while(true){ scanf("%s", op); if(strcmp(op, "translate") == 0){ scanf("%lf%lf%lf", &tx, &ty, &tz); ms[++top].translate(tx, ty, tz); ts[top] = 'm'; }else if(strcmp(op, "scale") == 0){ scanf("%lf%lf%lf", &tx, &ty, &tz); ms[++top].scale(tx, ty, tz); ts[top] = 'm'; }else if(strcmp(op, "rotate") == 0){ scanf("%lf%lf%lf%lf", &tx, &ty, &tz, &d); d = (d * pi) / 180.0; ms[++top].rotate(tx, ty, tz, d); ts[top] = 'm'; }else if(strcmp(op, "repeat") == 0){ scanf("%d", &k); ks[++top] = k; ts[top] = 'r'; }else if(strcmp(op, "end") == 0){ m.scale(1, 1, 1); while(top >= 0 && ts[top] != 'r'){ m = m * ms[top]; top--; } if(top < 0) break; m = m ^ ks[top]; ms[top] = m; ts[top] = 'm'; } } for(i = 0; i < n; i++){ tp.read(); tp = m.change(tp); printf("%.2f %.2f %.2f\n", tp.x + eps, tp.y + eps, tp.z + eps); } printf("\n"); } return 0; }
发表评论
-
升序数组中求一个key出现的次数
2013-01-09 23:08 1113算法思路: 在排好序的数组,相同的数字是排列在一起的,所以只需 ... -
判断单链表是否有环
2013-01-08 19:07 926算法思路: 指针p1和p2的起始值均为链表的表头,指针p1每次 ... -
hdu3684
2011-11-15 20:11 938/* 刚开始打了个记录上下左右四个点的,一直tle。 ... -
hdu3686
2011-11-14 20:43 1041/* 无向图边的双连通分量,在同一个连通分量里的边之间 ... -
poj3968
2011-11-14 04:45 1420source: http://poj.org/problem ... -
uva2819
2011-11-13 02:20 903source: http://livearchive.onli ... -
manacher算法
2011-11-11 00:06 2438const int LEN=110005; const ... -
hdu4118
2011-11-09 21:53 1198枚举每条边最多被经过的次数即可 #include ... -
hdu4115
2011-11-09 16:27 1043source: http://acm.hdu.edu.cn/ ... -
uva(Transitive Closure)
2011-11-08 14:45 921source: http://livearchive.onli ... -
zoj3500
2011-11-07 17:41 963求两个球的体积交或者并 #include <cs ... -
zoj3545
2011-11-04 18:18 870/* AC自动机 相当暴力的 解法: mark[i ... -
zoj3190
2011-11-04 17:34 1323/* * AC自动机,先对资源串和病毒串构成的字符串 ... -
zoj3228
2011-11-04 16:12 953/* * AC自动机,每个节点 添加一个d表示节点代 ... -
poj3691(DNA Repair)
2011-11-04 13:18 1486/* AC自动机,增设虚拟节点,求长度为n的字符串中包 ... -
hdu2825
2011-11-04 11:53 999/* AC自动机,增设虚拟节点,求长度为n的字符 ... -
hdu4095
2011-11-03 13:19 1024/* 第一步,构建BST,用第一个数作为bst的 ... -
zoj3540
2011-11-02 21:33 929/* 其实就是把总共的 放置次数减去不能放置的那些就行 ... -
poj1741(树的分治,基于边的 分治)
2011-11-02 20:25 3360/* 树基于边的分治算法,计算树中距离小于等于k的点 ... -
hdu2939
2011-10-29 18:36 863source: http://acm.hdu.edu.cn/s ...
相关推荐
2023bupt大创遥感语义分割.rar2023bupt大创遥感语义分割.rar2023bupt大创遥感语义分割.rar2023bupt大创遥感语义分割.rar2023bupt大创遥感语义分割.rar2023bupt大创遥感语义分割.rar2023bupt大创遥感语义分割.rar2023...
【标题】"BUPT打铃器 原音乐"指的是北京邮电大学(BUPT)特有的上下课铃声,这个软件或应用旨在帮助学生在家中模拟校园的学习环境。这款打铃器提供了原汁原味的BUPT铃声,让学生即使在远程学习期间也能感受到熟悉的...
在本实验中,我们主要关注的是“BUPT大二下,计网课程设计,DNS服务器实验”。这个项目涉及到了计算机网络中的一个重要组件——域名系统(DNS),以及与之相关的编程技术,如C++。DNS是互联网上的一个关键服务,它...
在本项目“BUPT软件工程分布式温控系统”中,我们看到了一个基于Python编程语言实现的系统,结合了PyQT5图形用户界面库和MySQL数据库技术。 1. **Python编程**:Python是一种高级编程语言,以其简洁的语法和强大的...
本实验主要针对北京邮电大学(BUPT)计算机学院的大三学生,旨在通过实践加深对数据库理论的理解,提高操作数据库的能力。实验涵盖了从基础到进阶的多个方面,包括实验一至实验六,每个实验都有相应的实验报告和数据...
【标题】:“BUPT计算机学院大雾,期末试卷,ppt” 这个标题暗示了这是一个与北京邮电大学(BUPT)计算机学院期末考试相关的资源。"大雾"可能是指某种难以理解或复杂的概念,或者可能是这次考试的特点,暗示题目...
【标题】"BUPT计算机大三Linux实验1-4"涉及的是北京邮电大学(BUPT)计算机科学与技术专业大三学生的Linux课程,该课程包括了四个阶段的实验实践和相关的教学材料。课程旨在深化学生对Linux操作系统的理解和应用能力...
本章节主要探讨了NoSQL数据库中的三种重要类型:图数据库、文档数据库和列族数据库,并结合北京邮电大学(BUPT)的相关课程作业进行深入学习。 首先,让我们详细了解一下图数据库。图数据库以节点、边和属性三元组...
在本篇“BUPT物理实验报告”中,涵盖了多个重要的物理学和电子学概念,主要涉及光学、力学和电磁学领域。这些实验不仅锻炼了学生的动手能力,也加深了他们对理论知识的理解。以下是对每个实验主题的详细阐述: 1. ...
《BUPT计算机系统csapp四次实验报告》 在计算机科学领域,实验是理解和掌握理论知识的重要途径。北京邮电大学(BUPT)的计算机系统课程(csapp)旨在通过实践教学,帮助学生深入理解计算机系统的运作原理。这份实验...
【标题】:“bupt.bmp图像附件”通常指的是一个包含名为“bupt.bmp”的位图(Bitmap)图像文件的压缩包。位图图像是一种常见的数字图像格式,广泛应用于计算机图形处理、网页设计和个人多媒体项目。 【描述】:描述...
本源码结合了rotate和skew,既可以单独执行rorate或者skew,也可以改变此两种方法的顺序来研究不同转换顺序带来的不同结果
在本压缩包“八皇后等java作业-bupt”中,主要包含了北邮(BUPU)计算机科学与技术专业的学生进行Java编程学习的一些作业。这些作业涵盖了基础的编程概念、多态性应用以及一个经典的算法问题——八皇后问题。下面...
【BUPT计算机系统基础】CSAPP_lab4_键盘驱动程序的分析与修改.docx 内容包含: 参考版实验报告 提交版实验报告 实验过程截图 VMware Workstation 16 Player libstdc++6-dev_3.4.6-6ubuntu3_i386.deb g++-3.4_3.4.6-6...
本项目“BUPT大二下,数字逻辑课程设计,clock电子钟.rar”是通过VHDL语言实现的一个功能丰富的电子钟系统,涵盖了时间显示、整点报时、闹钟设定以及当前时间预置等多个实用功能。 首先,我们来探讨VHDL的基本概念...
在“BUPT大二上大一下课程资源”这个压缩包中,包含了一系列的学术资料,主要涉及大学本科二年级上学期和下学期的部分核心课程。这些资源对于正在学习或者已经学习过这些课程的学生来说,是宝贵的复习和参考资料。...
用VHDL写的计时器,数字电路与逻辑设计实验 原创
在这个“datalink_BUPT_计网大作业_滑动窗口协议_”的压缩包中,我们可以看到一个名为“datalink.c”的源代码文件,这很可能是北邮大学计算机网络课程的一个实践项目,要求学生实现滑动窗口协议。 滑动窗口协议的...
【计算机组成原理】是计算机科学与技术领域的重要基础课程,主要研究计算机系统的基本构成和工作原理。这个实验可能涉及到的内容广泛,包括数据表示、运算器设计、存储系统、指令系统、中央处理器(CPU)、总线结构...
北京邮电大学(简称BUPT)计算机学院为大一新生开设的计算导论与程序设计课程,是一门旨在培养学生基础编程能力和算法思维的重要课程。在学习过程中,学生们会接触到大量的上机编程题目,这些题目通常被称为在线判题...