matrix

opengl oblique projection

不羁的心 提交于 2020-02-20 00:26:30
问题 I want to create a oblique (cavalier) projection in OpenGL. I know this operation is not default supported and instead I need a Shear Matrix and then make an Orthogonal Projection. Can you tell me what are the OpenGl steps / functions that I have to make? 回答1: I've not used a oblique/cavalier projection before, but the following should give you an idea of how to proceed: Create a 4x4 shear matrix, H(θ, Φ) = | 1, 0, -cot(θ), 0 | | 0, 1, -cot(Φ), 0 | | 0, 0, 1, 0 | | 0, 0, 0, 1 | θ being the

opengl oblique projection

懵懂的女人 提交于 2020-02-20 00:22:49
问题 I want to create a oblique (cavalier) projection in OpenGL. I know this operation is not default supported and instead I need a Shear Matrix and then make an Orthogonal Projection. Can you tell me what are the OpenGl steps / functions that I have to make? 回答1: I've not used a oblique/cavalier projection before, but the following should give you an idea of how to proceed: Create a 4x4 shear matrix, H(θ, Φ) = | 1, 0, -cot(θ), 0 | | 0, 1, -cot(Φ), 0 | | 0, 0, 1, 0 | | 0, 0, 0, 1 | θ being the

牛客网剑指offer刷题Java版-19顺时针打印矩阵

岁酱吖の 提交于 2020-02-17 23:00:38
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 转圈圈法: import java . util . ArrayList ; public class Solution { public ArrayList < Integer > printMatrix ( int [ ] [ ] matrix ) { ArrayList < Integer > arr = new ArrayList < Integer > ( ) ; int i = 0 ; int j = 0 ; int k = 0 ; while ( true ) { for ( ; j < matrix [ 0 ] . length - k ; j ++ ) arr . add ( matrix [ i ] [ j ] ) ; j -- ; i ++ ; if ( i > matrix . length - k - 1 ) break ; for ( ; i < matrix . length - k ; i ++ ) arr . add ( matrix [ i ] [ j ] ) ; i

顺时针打印矩阵

我只是一个虾纸丫 提交于 2020-02-17 06:41:09
题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路: 简单来说,就是不断地收缩矩阵的边界 定义四个变量代表范围,up、down、left、right 向右走存入整行的值,当存入后,该行再也不会被遍历,代表上边界的 up 加一,同时判断是否和代表下边界的 down 交错 向下走存入整列的值,当存入后,该列再也不会被遍历,代表右边界的 right 减一,同时判断是否和代表左边界的 left 交错 向左走存入整行的值,当存入后,该行再也不会被遍历,代表下边界的 down 减一,同时判断是否和代表上边界的 up 交错 向上走存入整列的值,当存入后,该列再也不会被遍历,代表左边界的 left 加一,同时判断是否和代表右边界的 right 交错 代码描述: import java . util . ArrayList ; public class Solution { public ArrayList < Integer > printMatrix ( int [ ] [ ] matrix ) { ArrayList < Integer > list =

剑指OFFER——顺时针打印矩阵

独自空忆成欢 提交于 2020-02-15 15:52:03
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. class Solution { public: vector<int> printMatrix(vector<vector<int> > matrix) { int row = matrix.size(); int col = matrix[0].size(); vector<int> res; // 输入的二维数组非法,返回空的数组 if (row == 0 || col == 0) return res; // 定义四个关键变量,表示左上和右下的打印范围 int left = 0, top = 0, right = col - 1, bottom = row - 1; while (left <= right && top <= bottom) { // left to right for (int i = left; i <= right; ++i) res.push_back(matrix[top][i]); // top to bottom for (int i = top + 1; i <= bottom; +

leetcode 74. 搜索二维矩阵

╄→гoц情女王★ 提交于 2020-02-15 04:06:34
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性: 每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。 示例 1: 输入: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] target = 3 输出: true 示例 2: 输入: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] target = 13 输出: false 方法1:二分搜索,将二维矩阵看做一位矩阵搜索 public boolean searchMatrix ( int [ ] [ ] matrix , int target ) { if ( matrix . length == 0 ) { return false ; } int row = matrix . length ; int col = matrix [ 0 ] . length ; int right = row * col - 1 ; int left = 0 ; while ( left <= right ) { int mid = ( left + right ) / 2 ; //所在行 int i = mid / col ; //所在列

Eigen 简明教程

∥☆過路亽.° 提交于 2020-02-14 13:34:10
Eigen Quick Reference 一个 Eigen 的参考手册,包含 Python(Numpy) 与 Eigen 的对应用法,以及一些练习题。持续更新中。 Eigen array, matrix and vector types 在 Eigen 中,Matrix 用来表示数学意义上的矩阵和向量,Array 用来表示 1D 和 2D 的数组,你可以这样定义它们: typedef Matrix<Scalar, RowsAtCompileTime, ColsAtCompileTime, Options> MyMatrixType; typedef Array<Scalar, RowsAtCompileTime, ColsAtCompileTime, Options> MyArrayType; Scalar 表示系数的类型(例如float, double, boll, int 等等)。 RowsAtCompileTime 和 ColsAtCompileTime 表示矩阵行数和列数(必须在编译时期给定),或者使用 Dynamic 表示其行数或者列数在运行时期给定。 Options 可以是 ColMajor 或者 RowMajor ,它们表示存储数据的顺序,默认是 ColMajor 。( 这里 有存储顺序的更多介绍) 你可以随意的组合上面的参数来创建 Matrix,例如 Matrix

[LeetCode] 54. Spiral Matrix

蹲街弑〆低调 提交于 2020-02-14 02:53:32
螺旋矩阵。题意是给一个二维数组,请你螺旋遍历input,输出一个一维数组记录螺旋遍历的结果。例子, Example 1: Input: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] Output: [1,2,3,6,9,8,7,4,5] Example 2: Input: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] Output: [1,2,3,4,8,12,11,10,9,5,6,7] 这个题我没有什么比较巧妙的思路,只能照着遍历的方式去实现了代码,按照右 - 下 - 左 - 上的顺序去遍历。这个题做的时候需要用几个变量去记录二维数组坐标的边界,同时记得当每一行/列遍历完了之后,边界值需要减1因为遍历的时候每一圈的size都在减小。 时间O(m * n) 空间O(n) - 输出是一个一维数组 1 /** 2 * @param {number[][]} matrix 3 * @return {number[]} 4 */ 5 var spiralOrder = function (matrix) { 6 let res = []; 7 if (matrix.length === 0) { 8 return res; 9 } 10 let rowBegin = 0; 11 let rowEnd =

机器人学之运动学(一):运动学描述基础

半城伤御伤魂 提交于 2020-02-08 18:08:58
目录 1.刚体运动状态描述 2.移动 3.转动 4.选择矩阵 1.刚体运动状态描述 平面 首先在平面上定义世界坐标系(world frame),一个平面上有三个自由度来描述刚体,即2个移动自由度(沿x轴水平移动和沿y轴上下移动)和1个旋转自由度(沿刚体质心顺/逆时针转动)。 空间 建立三维空间直角坐标系,一个空间内有6个自由度解释刚体的运动,即3个移动自由度(沿x,y,z轴移动)和3个转动自由度(沿x,y,z轴旋转) 整合刚体的状态 在刚体上建立坐标系(body frame),常建立在质心上 移动:由body frame的原始位置决定,即刚体质心相对世界坐标系原点的位置 转动:由body frame的姿态决定,即3个坐标轴相对世界坐标系的姿态 刚体运动状态的描述 记录不同时间点刚体质心的轨迹,已知轨迹的位置,求得轨迹对时间的微分,就是质心的速度,再次微分,就是质心运动的加速度。 已知刚体转动的姿态,由微分和二次微分,可求得刚体转动的角速度和角加速度。 借由刚体在平面上的三个自由度和空间上的六个自由度的微分和二次微分,可以知道刚体的移动和转动状态。 2.移动 移动:以向量 P ⃗ \vec P P 描述建立在刚体上的坐标系{B}的原点相对世界坐标系{A}的状态。 将刚体质心相对于{A}的位置映射为向量,与世界坐标做连接。 假设质心P坐标可以表示为: P ⃗ = [ P x P y P

LeetCode——542. 01 矩阵

我们两清 提交于 2020-02-08 13:09:11
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 0 0 0 示例 2: 输入: 0 0 0 0 1 0 1 1 1 输出: 0 0 0 0 1 0 1 2 1 注意: 给定矩阵的元素个数不超过 10000。 给定矩阵中至少有一个元素是 0。 矩阵中的元素只在四个方向上相邻: 上、下、左、右。 一 我们可以首先遍历一次矩阵,将值为0的点都存入queue,将值为1的点改为INT_MAX。然后开始BFS遍历,从queue中取出一个数字,遍历其周围四个点,如果越界或者周围点的值小于等于当前值加1,则直接跳过。因为周围点的距离更小的话,就没有更新的必要,否则将周围点的值更新为当前值加1,然后把周围点的坐标加入queue,参见代码如下: 解法一: class Solution { public: vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) { int m = matrix.size(), n = matrix[0].size(); vector<vector<int>> dirs{{0,-1},{-1,0},{0,1},{1,0}}; queue<pair<int, int