首页 > 其他分享 >games101_Homework0

games101_Homework0

时间:2024-02-20 18:55:36浏览次数:26  
标签:平移 games101 Homework0 矩阵 旋转 弧度 坐标 include

作业描述 :

  给定一个点 P=(2,1), 将该点绕原点先逆时针旋转 45 ◦,再平移 (1,2), 计算出 变换后点的坐标(要求用齐次坐标进行计算)。

作业解答:

#include<cmath>
#include<eigen3/Eigen/Core>
#include<eigen3/Eigen/Dense>
#include<iostream>

int main(){
   // define point in Homogeneous Coordinates
    Eigen::Vector3f res(2.0f, 1.0f, 1.0f);
    // define Affine Transformations Matrix
    // Translate then Rotate
    Eigen::Matrix3f Rota_aff;
    Rota_aff << cos(45.0/180.0*acos(-1)), -sin(45.0/180.0*acos(-1)), 0,
           sin(45.0/180.0*acos(-1)),  cos(45.0/180.0*acos(-1)), 0,
           0, 0, 1;
    Eigen::Matrix3f Tran_aff;
    Tran_aff << 1.0, 0.0, 1.0,
                0.0, 1.0, 2.0,
                0.0, 0.0, 1.0;
    std::cout << Tran_aff*Rota_aff*res << std::endl;
    return 0;
}

作业解析:二维点的齐次坐标表示可以用三维向量概况(即最后一位为1),然后使用先旋转再平移的规则将二维坐标点依次左乘旋转矩阵和平移矩阵。

       此外旋转矩阵(逆时针旋转a度)即 m3(cosa, -sina, 0)(sina, cosa, 0)(0, 0, 1),平移矩阵(沿x轴平移a,沿y轴平移b)即 m3(1, 0, a)(0, 1, b)(0, 0, 1)。

注:如示例代码,在进行点位运算时尽量使用float,此外sin与cos函数的传入值需为弧度,弧度45度即为45.0/180.0*acos(-1)   公式为:弧度 = 角度 / 180 * pi

 

标签:平移,games101,Homework0,矩阵,旋转,弧度,坐标,include
From: https://www.cnblogs.com/wosun/p/18023810

相关文章

  • games101-2 透视深度插值矫正与抗锯齿分析
    透视深度插值矫正与抗锯齿分析深度插值的差错原因透视深度插值公式推导games101中的错误msaa与ssaa简要定义games101中ssaa的实现games101中msaa的实现深度插值的差错原因当投影的图形与投影的平面不平行时,这时进行透视投影,从上图中可以看出,投影平面上的线段时均匀......
  • games101一些问题及思考
    games101一些问题及思考1.透视投影为什么z值变大从透视投影矩阵可以看出z会变大,但从直观上怎么想呢。想象一段向无穷远处延伸的铁轨,假设有100m,但照片中前一半明显不足50m,后一段明显多于50m,可以体会到近平面和远平面之间的点都会向远平面压缩,使得出现近大远小的情况。2.各个......
  • [GAMES101] 我的结课打卡
    ......
  • games101-homework-notes
    Games101作业笔记Created:2023-06-19T12:00+08:00Published:2023-08-17T16:23+08:00Categories:ComputerGraphics目录pa0hw1ProjectionMatrixTriangleRasterizerprocesshw2insidetrianglerasterize_trianglemyhw2bugs使用\(y+0.5\)setindex导致三角形分裂屏幕两......
  • games101-lecture-notes
    Games101课程笔记Created:2023-06-07T20:54+08:00Published:2023-08-16T21:05+08:00Categories:ComputerGraphics目录Lecture01:OverviewofComputerGraphicsmotivation:学了有什么用?课程内容课程资源Lecture02:ReviewofLinearAlgebra点乘叉乘叉乘的作用Lecture03......
  • GAMES101笔记(04)
    本篇对应的是第七课上节课讲完了光栅化的内容,这节课讲的有深度测试,光照和着色深度测试我在学校看shader入门精要的时候有些印象,但也仅此而已了,我觉得还是要先补一下图形学的知识再去啃入门精要会好一些 深度缓存在计算机成像时,对于一个我们要输出的画面,如何确保画面上的东......
  • GAMES101笔记(03)
    前几个月忙着拯救地球所以有比较长时间的空档这次笔记对应的是games101内容的第六课,至于为什么跳过第五课因为第五课我感觉也没啥需要记笔记的,基本就是光栅化的一些基本概念以及最基本的一些实现理念,视频最后讲到了关于锯齿和走样的一些东西,第六课开头即紧接着这部分进行讲解采......
  • games101 HomeWork6
    Games101HomeWork6导航导航作业要求IntersectP(constRay&ray,constVector3f&invDir,conststd::array<int,3>&dirIsNeg)intheBounds3.hpp:这个函数的作用是判断包围盒BoundingBox与光线是否相交,你需要按照课程介绍的算法实现求交过程。getIntersection(BVHBuil......
  • games101 HomeWork5
    Games101HomeWork5导航导航任务Renderer.cpp中的Render():这里你需要为每个像素生成一条对应的光线,然后调用函数castRay()来得到颜色,最后将颜色存储在帧缓冲区的相应像素中。Triangle.hpp中的rayTriangleIntersect():v0,v1,v2是三角形的三个顶点,orig是光线的起点......
  • games101 HomeWork
    Games101HomeWork4bezier:该函数实现绘制Bézier曲线的功能。它使用一个控制点序列和一个OpenCV::Mat对象作为输入,没有返回值。它会使t在0到1的范围内进行迭代,并在每次迭代中使t增加一个微小值。对于每个需要计算的t,将调用另一个函数recursive_bezier,然后该函数将返......