矩阵

unity 蒙皮的实现方式

只愿长相守 提交于 2020-01-17 06:24:36
原理: 蒙皮,三维动画术语,也用于3D游戏中。三维动画的一种制作技术。在三维软件中创建的模型基础上,为模型添加骨骼。由于骨骼与模型是相互独立的,为了让骨骼驱动模型产生合理的运动。把模型绑定到骨骼上的技术叫做蒙皮。 因为蒙皮动画要改动的是我们的骨骼的缩放,平移,渲染。是跟骨骼有关系的。但是我们的模型是一个mesh,是由很多顶点组成的,那么要让骨骼改动的时候mesh也变化的话就需要改动mesh上的顶点。那么自然就需要骨骼和顶点间有一个关联关系。 蒙皮一般是美术做出来的骨骼与顶点的关联关系,也就是说蒙皮就是骨骼与顶点间的关系。 实现方式: 在unity中,我们要获取这个关联关系可以通过Mesh下的boneWeights来获取,这里获取的是每个顶点的关联骨骼信息。就包括boneIndex0到3和weight0到3。分别是顶点的关联骨骼索引和关联骨骼索引的权重。unity支持4个关联骨骼。 要做蒙皮的话我们需要把骨骼的顶点与他的有关联的骨骼索引关联起来。所以需要做一次所有骨骼的坐标转换到动画做动画的坐标系,需要做一次矩阵左乘。 我们要获取骨骼的矩阵信息,首先需要获取骨骼坐标下的骨骼矩阵,通过Mesh的bindposes可以获取所有的骨骼坐标信息。然后左乘动画世界坐标bones[j].localToWorldMatrix * bindPoses[j]。这样可以转换到世界坐标下。

转载

社会主义新天地 提交于 2020-01-17 05:21:14
转载 :http://www.cnblogs.com/lxshanye/archive/2013/05/20/3088558.html 1.变长一维数组 这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。实现变长数组最简单的是变长一维数组,你可以这样做: 1: //文件名: array01.cpp 2: #include<iostream> 3: using namespace std; 4: int main() 5: { 6: int len; 7: cin>>len; 8: //用指针p指向new动态分配的长度为len*sizeof(int)的内存空间 9: int *p=new int[len]; 10: ........... 11: delete[] p; 12: return 0; 13: } 注意int *p=new int[len];这一句,你不能这样做: int p[len]; C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。而且这样也不行: int p[]=new int[len]; 编译器会说不能把int*型转化为int[]型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int *p=new int[len]; array01

最大子矩阵和(二维矩阵转一维DP)

天涯浪子 提交于 2020-01-17 02:19:25
题目描述 蒜头君拿到了一个矩阵,他想知道其中的最大非空子矩阵和是多少。 输入格式 第一行输入两个整数 n,m代表这个矩阵的行数和列数。接下来n行,每行m个整数 a i1 ,a i2 ,a i3 ⋯a im 。(1≤m,n≤400,−10 9 ≤a ij ≤10 9 ) 输出格式 输出一个整数,代表最大非空子矩阵和,占一行。 样例输入 3 3 1 -2 3 -4 5 -6 7 -8 9 样例输出 9 与最大子段和类似,不过上升到了二维,那么我们可以通过枚举上下边界将题目转化为一维的,通过前缀和又可以快速算出固定一列从一行到某一行所有数的和。 1 #include <stdio.h> 2 #include <string.h> 3 #include <iostream> 4 #include <string> 5 #include <math.h> 6 #include <algorithm> 7 #include <vector> 8 #include <stack> 9 #include <queue> 10 #include <set> 11 #include <map> 12 #include <sstream> 13 const int INF=0x3f3f3f3f; 14 typedef long long LL; 15 const int mod=1e9+7; 16

bzoj1059: [ZJOI2007]矩阵游戏

眉间皱痕 提交于 2020-01-17 01:06:53
https://www.lydsy.com/JudgeOnline/problem.php?id=1059 水题想一年,图论太菜了 一个很显然的结论,如果某一行或者某一列为没有黑色的话,怎么交换,它都不可能有黑色。 那么其实问题就转化为了每一行里面选择一列作为这一行的占用对角线的黑色棋子。 比如a[1][2] ,a[1][4]都是黑的,那么2,4列放到a[1][1]都是可以的,因为任意交换两列,说明列可以全排序,而我们之前已经确保了每一行每一列都有黑色。 那么就二分图匹配了,第i行可以匹配很多列,看能不能完全匹配 #include<bits/stdc++.h> using namespace std; const int maxl=210; int n,m,cnt,ans,ansflag; int ehead[maxl],match[maxl],numr[maxl],numc[maxl]; struct ed { int nxt,to; }e[maxl*maxl]; bool vis[maxl]; inline void add(int u,int v) { e[++cnt].to=v;e[cnt].nxt=ehead[u];ehead[u]=cnt; } inline void prework() { scanf("%d",&n); for(int i=1;i<=n;i++)

C语言 基础练习40

旧街凉风 提交于 2020-01-16 18:24:53
一、题目 1.输入2个整数,求两数的平方和并输出。 2. 输入一个圆半径(r)当r>=0时,计算并输出圆的面积和周长,否则,输出提示信息。 3、函数y=f(x)可表示为: 4、编写一个程序,从4个整数中找出最小的数,并显示此数。 5.有一函数当x<0时y=1,当x>0时,y=3,当x=0时y=5,编程,从键盘输入一个x值,输出y值。 6.从键盘输入两个数,求出其最大值(要求使用函数完成求最大值,并在主函数中调用该函数) 7、从键盘输入你和你朋友的年龄,编成判断谁的年龄最大,并打印最大者的年龄。 8、键盘输入2个加数,再输入答案,如果正确,显示“right”,否则显示“error” 9. 编一程序每个月根据每个月上网时间计算上网费用,计算方法如下: 要求当输入每月上网小时数,显示该月总的上网费用(6分) 10.神州行用户无月租费,话费每分钟0.6元,全球通用户月租费50元,话费每分钟0. 4元。输入一个月的通话时间,分别计算出两种方式的费用,判断哪一种合适。 11.个人所得税计算,应纳税款的计算公式如下: 收入 税率 收入<=1000元部分 0% 2000元>=收入>1000元的部分 5% 3000元>=收入>2000元的部分 10% 6000元>=收入>3000元的部分 15% 收入>6000元的部分 20% 输入某人的收入,计算出应纳税额及实际得到的报酬。(7分)

目标检测新网络——Matrix Net (xNet)参数更少,训练更快

谁说我不能喝 提交于 2020-01-16 16:00:50
摘要 提出了一种新的深度目标检测体系结构——矩阵网(xNets)。xNets将具有不同大小和长宽比的对象映射到层中,这些层中对象的大小和长宽比几乎一致。因此,xnet提供了支持比例和高宽比的体系结构。我们利用xNets来增强基于关键点的对象检测。我们的架构在MS COCO上实现了47.8的mAP,这比任何其他的单镜头探测器都要高,同时使用了一半的参数和减少了3倍训练时间 论文: https://arxiv.org/pdf/1908.04646.pdf 1. 简介 基于关键点的目标检测器中,cornerNet通过检测角点,进行物体检测;centernet通过物体的中心进行目标检测。 同时,在不同的尺度进行目标检测也是十分重要的如特征金字塔网络(FPN),小目标通过靠前的特征图进行预测,大目标通过靠后的特征图进行预测。尽管FPNs提供了一种优雅的方式对于处理不同大小的对象,它们没有提供不同长宽比对象的任何解决方案。 文章提出了Matric Network来处理不同尺度,不同高宽比的物体 2. 模型结构 xNets每一层的特征用l i,j 表示每一个特征,l 1,1 表示上图中最左上角的特征图,i表示宽度方向下采样2 i-1 ,同理,j表示高度方向下采样2 j-1 ,对角线上和FPN一样都是正规的矩形,非对角线上为矩形。上图中层接近右上角或左下角角的矩阵模型对象具有很高或很高低的纵横比

Numpy基本用法

依然范特西╮ 提交于 2020-01-16 11:54:08
Numpy是一个科学计算库,其中提供的ndarray具有很多优势。 ndarray的属性:     在创建ndarray时,如果没有指定,会设定为int64或者float64类型   创建时可以使用np.array([[1,2,3],[4,5,6]],dtype=np.float32),对ndarray的类型进行指定。 生成数组的方法:   1)生成0和1数组:   np.zeros(shape,dtype)   np.ones(shape,dtype)   2)从已有的数组中生成ndarray   np.array()   深拷贝   np.asarray()  浅拷贝   np.copy()    深拷贝   3)生成固定范围的数组   np.linspace(start,end,step) 数据范围是两边闭区间   np.arange(start,end,step)   数据范围是左闭右开   4)生成随机数组   均匀分布:   生成[0,1)范围内的一组均匀的数   np.random.rand(d0,d1....dn)   从一个均匀分布中随机采样   np.random.uniform(low=0.0,high=1.0,size=None)   返回值为ndarray类型,形状与参数size中描述的一致   np.random.randint(low,high

Python matplotlib subplot 简单使用

久未见 提交于 2020-01-16 09:41:40
原文: https://www.cnblogs.com/xiaoboge/p/9683056.html mark:得先回忆一下以前学的矩阵哈,现在才知道矩阵在啥时候用。。。 直接上例子: subplot(numRows, numCols, plotNum)   如:subplot(2, 3, 3)   numRows=2, numCols=3:表示矩阵有2行 3列   plotNum=3:指定区域为3,坐标为(1, 3)   如:plotNum=4:指定区域为4,坐标为(2, 1)     区域 应该就是 挨着数下去吧   2*3的矩阵,总共有6个坐标点: (1, 1), (1, 2), (1, 3) (2, 1), (2, 2), (2, 3)    来源: https://www.cnblogs.com/guxingy/p/12199609.html

寒假集训第三天---线段树部分题解

和自甴很熟 提交于 2020-01-16 03:04:02
CF1268B - Domino for Young 题目大意 :给您一排高度从左到右非递增的矩阵,输入为n(1≤n≤300000),代表有n列矩形;接下来一行有n个数字,代表对应矩阵高度(1≤ai≤300000,ai≥ai+1)。问您往里面插1 2或者2 1的矩阵最多能插多少个。 解法 :贪心考虑每一列,如果是偶数,直接填满1*2,如果是奇数,记录当前列。我们画图可得,如果两个最接近的高度为奇数的列,如果 中间有偶数个高度为偶数的矩阵 ,那都可以消掉(画图很明显)。如果它们之间只有 奇数个高度为偶数的矩阵 ,那怎么也不能消完,最少也会剩下两个点,即两个高度为奇数的矩阵的最下方的两个点( 贪心的考虑,留底下比留上面更优 )。按照这个思路一直贪心下去就可以了。 代 🐎 码 # include <bits/stdc++.h> using namespace std ; # define ll long long int main ( int argc , char const * argv [ ] ) { ll ans = 0 ; int n ; stack < int > st ; while ( ! st . empty ( ) ) st . pop ( ) ; scanf ( "%d" , & n ) ; for ( int i = 1 , x ; i <= n ; ++ i )

单位矩阵

浪尽此生 提交于 2020-01-16 02:34:31
单位矩阵 题目描述 X是一个灰常讨厌数学的学生,所以想请你帮他解决一个简单的关于矩阵的问题。给定一个只有0和1构成的大小为M*N的矩阵,在其中找到最大的子单位矩阵。单位矩阵是指主对角线上元素全部为1,其余元素全部为0的方阵。主对角线是指左上角到右下角方向的对角线。数据规模(1<=M,N<=1000)。 输入格式 多组数据输入,每组第一行输入M和N,空格分开,接下来M行输入矩阵数据,每行N个元素,输入以文件尾(EOF)结束。 输出格式 对于每组数据,输出该矩阵中最大子单位矩阵的行数,每次输出独占一行。 输入样例 复制 5 6 010000 010001 010000 001000 100111 2 5 01000 00110 输出样例 复制 3 2 会花思路代码段: # include <iostream> # include "stdio.h" # include <cstring> using namespace std ; int a [ 1005 ] [ 1005 ] = { 0 } ; int f [ 1005 ] [ 1005 ] = { 0 } ; int main ( ) { int n , m ; char c ; while ( scanf ( "%d %d" , & n , & m ) != EOF ) { int maxx = 0 ; int z [ 1005