二维

初学算法

本秂侑毒 提交于 2020-04-09 11:12:10
所谓凸包,就是 一个计算几何(图形学)中的概念。用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有的点。维基百科对集合X的凸包(Convex Hull)有四个定义,分别为: The (unique) minimal convex set containing X --- 包含集合X的最小凸集合 The intersection of all convex sets containing X --- 所有包含集合X的凸集合的交集 The set of all convex combinations of points in X . --- 集合X中所有点的凸组合的集合 The union of all simplices with vertices in X . --- 集合X中所有单一顶点的集合 对于二维凸包,不如我们把平面上的一些点想象为“钉子”,而你正将一个橡皮筋撑的足够大,以至于所有“钉子”都在你的橡皮筋包围的区域里。现在我们松开它。“啪”的一声,橡皮筋会尽可能的收缩到极致,而这时撑起橡皮筋的这些“钉子”构成的集合, 也就是凸包。 通过观察,我们可以知道“最左”和“最右”的两个点一定在构成凸包的集合里。而Garham's Scan算法也正是注意到了这点。另外,如果我们按照顺时针方向观察凸包,如P->Q->R

p95 搜索二维矩阵(leetcode 74)

流过昼夜 提交于 2020-04-06 19:07:11
一:解题思路 这个题目是二分搜索的一个变形题目。这个题目的解题关键在于将二维数组看做成一维数组,然后利用二分的思想不断的进行更新。matrix[r][c],r=mid/n,c=mid%n。其中n为数组的列数。Time:O(log(m*n)),Space:O(1) 二:完整代码示例 (C++版和Java版) C++: class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { if (matrix.size() == 0 || matrix[0].size() == 0) return false; int m = matrix.size(); int n = matrix[0].size(); int low = 0, high = m * n - 1; while (low <= high) { int mid = low + (high - low) / 2; int r = mid / n; int c = mid % n; if (matrix[r][c] < target) low = mid + 1; else if (matrix[r][c] > target) high = mid - 1; else return true; } return false

WPF 3D 知识点大全以及实例

瘦欲@ 提交于 2020-04-01 06:49:48
原文: WPF 3D 知识点大全以及实例 引言 现在物联网概念这么火,如果监控的信息能够实时在手机的客服端中以3D形式展示给我们,那种体验大家可以发挥自己的想象。 那生活中我们还有很多地方用到这些,如上图所示的Kinect 在医疗上的应用,当然还有体感游戏等等。这里无处不存在3D开发。 3D 用来增加视觉效果,给人以更加直观,真实的感觉。 3D如此美妙,那我们在WPF中又该从何处入手开启我们的3D编程旅程? WPF中3D开发技术的基础知识应该有以下几点: 3D开发基础知识 WPF中3D开发的基础元素(Elements) WPF中3D变换和动画 常用辅助类 3D开发基础知识 坐标系 Coodinate System WPF中二维图形的坐标系将原点定位在呈现区域(通常是屏幕)的左上角。 在二维系统中,x 轴上的正值朝右,y 轴上的正值朝下。而在三维坐标系中,原点位于呈现区域的中心,x 轴上的正值朝右,但是 y 轴上的正值朝上,z 轴上的正值从原点向外朝向观察者。传统的二维和三维坐标系表示形式如下图 由这些轴定义的空间是三维对象在 WPF 中的固定参考框架。 当您在该空间中生成模型并创建光源和照相机以查看这些模型时,一定要在向每个模型应用变换时,将固定参考框架或“全局空间”与您为该模型创建的局部参考框架区分开。 另请记住,根据光源和照相机设置

使用二分法查询二维整型数组的值(找到返回其坐标)

倖福魔咒の 提交于 2020-03-30 00:24:23
该二维数组的特征是: a.每行中的整数从左到右按升序排列。 b.每行的第一个整数大于前一行的最后一个整数。 可以每行都进行二分查找(由于该数组的特征,所以可以先将要查找的数与本行的最后一个数据比较,若大于则直接进入下一行比较,增加效率,减少比较的次数),如果未找到则进入下一层,直到找完该二维数组。 private static String find(int[][] arr, int num) { int row = 0; //控制行数 while (row < arr.length){ int left = 0; //行的左下标 int right = arr[row].length - 1; //行的右下标 while (left <= right) { //每一行进行二分查找 if(num > arr[row][right]){ //如果查找的数比该行的最后一个数还大,则直接进入下一行的比较 break; } //int mid = (left + right) / 2; int mid = (right - left + 1) / 2 + left; //防止相加超过数据类型的上界 if (arr[row][mid] == num) { return "[" + row + "," + mid + "]"; } else if (arr[row][mid] > num) {

二维平面计算几何模板

前提是你 提交于 2020-03-29 07:06:54
1 //author Eterna 2 #include<iostream> 3 #include<algorithm> 4 #include<cstdio> 5 #include<vector> 6 #include<cstring> 7 #include<string> 8 #include<cmath> 9 #include<cstdlib> 10 #include<utility> 11 #include<deque> 12 #include<queue> 13 using namespace std; 14 //------------------------------点与直线部分----------------------------- 15 const double pi = acos(-1.0); 16 const double eps = 1e-10; 17 //double比较和0的大小关系 18 inline int Dcmp(double x) { 19 if (fabs(x) < eps)return 0; 20 else return x < 0 ? -1 : 1; 21 } 22 struct point { 23 friend istream& operator >>(istream& in, point& rhs) { 24 in >> rhs

二维平面最近点-分治

老子叫甜甜 提交于 2020-03-29 07:06:34
题目描述 给出二维平面上的n个点,求其中最近的两个点的距离的一半。 输入包含多组数据,每组数据第一行为n,表示点的个数;接下来n行,每行一个点的坐标。 当n为0时表示输入结束,每组数据输出一行,为最近的两个点的距离的一半。 输入样例: 2 0 0 1 1 2 1 1 1 1 3 -1.5 0 0 0 0 1.5 0 输出样例: 0.71 0.00 0.75 题目解析: 采用分治的思想,把n个点按照x坐标进行排序,以坐标mid为界限分成左右两个部分, 对左右两个部分分别求最近点对的距离,然后进行合并。对于两个部分求得的最近距离d, 合并过程中应当检查宽为2d的带状区间是否有两个点分属于两个集合而且距离小于d,最多 可能有n个点,合并时间最坏情况下是O(n^2).但是,左边和右边中的点具有以下稀疏的性质, 对于左边中的任意一点,右边的点必定落在一个d*2d的矩形中,且最多只需检查6个点( 鸽巢原理),这样,先将带状区间的点按照y坐标进行排序,然后线性扫描,这样合并的时 间复杂度为O(nlogn)。 代码: #include<iostream> #include<stdio.h> #include<algorithm> #include<cmath> using namespace std; double MAX = 1e9; int a,b; struct Node{ double x

lintcode:搜索二维矩阵II

拥有回忆 提交于 2020-03-28 15:09:50
题目 搜索二维矩阵 II 写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数。 这个矩阵具有以下特性: 每行中的整数从左到右是排序的。 每一列的整数从上到下是排序的。 在每一行或每一列中没有重复的整数。 样例 考虑下列矩阵: [ [1, 3, 5, 7], [2, 4, 7, 8], [3, 5, 9, 10] ] 给出target = 3 ,返回 2 挑战 要求O(m+n) 时间复杂度和O(1) 额外空间 解题 直接遍历,时间复杂度是O(MN) public class Solution { /** * @param matrix: A list of lists of integers * @param: A number you want to search in the matrix * @return: An integer indicate the occurrence of target in the given matrix */ public int searchMatrix(int[][] matrix, int target) { // write your code here if(matrix == null) return 0; int row = matrix.length; if(row ==0) return 0; int col =

二维材料力学性能首次测出

流过昼夜 提交于 2020-03-26 17:42:08
3 月,跳不动了?>>> 目前已知的材料特性都是基于材料的三维结构,而最薄的材料只有一个原子厚度,其二维力学性能完全不同于三维材料特性。为了获取和处理二维材料,迄今为止都是以三维材料薄膜形式替代。德国萨尔州大学物理学家乌韦·哈特曼和莱布尼茨新材料研究所的研究人员合作,通过扫描隧道显微镜测量石墨烯,首次能够表征原子级薄膜材料的二维力学性能。相关结果刊登在专业杂志《纳米尺度》上。 近年来,二维材料备受关注。2010年,安德烈·吉姆和康斯坦丁·诺沃索洛夫因研究二维纯碳材料石墨烯而获得诺贝尔物理学奖,由此开启了诸如硅、锗等元素的二维材料制造和材料特性表征。哈特曼表示,一些二维材料的电子特性相当惊奇,如材料内的电子移动遵循相对论原理,而传统三维材料基本不是这样,在制造电子元件方面,这是一个有趣的优势。另外,二维材料的力学性能也是独一无二的,相对其厚度,显示出的力学稳定性比三维材料大得多。2013年,欧盟投入10亿欧元研究经费,将石墨烯列为旗舰项目,以进一步挖掘二维材料的潜力。 然而到目前为止,关于这些新材料力学性质的许多信息都来自模拟计算。哈特曼说:“二维材料一直只能作为三维材料表面上的薄膜来看待,而整个系统的性质不可避免地还是由三维材料来决定。”不过,在最新研究中,他们首次直接测量出了原子级薄碳改性二维材料的力学性能。“这使得模拟计算的数据可以直接与实验结果进行比较。此外

DotCode二维码基本概念

梦想与她 提交于 2020-03-26 17:32:57
3 月,跳不动了?>>> 什么是DotCode? DotCode是由不连续的点组成的二维条形码符号。 设计的目的是为了工业流水线上,使用高速喷墨和激光打印机印刷产品有效期,批号,以及序列号。 DotCode的特点 支持ASCII字符集 使用9个点来表示一个codeword DotCode二维码的尺寸是灵活可变的。在编码内容不变的情况下,可以根据货品表面的大小来调整印刷。码的宽+高的结果必须等于奇数。4条边周围必须有等于3个点距离的安静区域 DotCode二维码的容量没有上限,根据信息量可以计算出尺寸。计算方法如下: NC: 校验字符数量 ND: 数据字符数量 NC = 3 + (ND / 2) MASK = 2 掩码字符数量 MinDots = 9 x (ND + NC) + MASK H x W >= MinDots x 2 使用Reed-Solomon算法纠错 DotCode二维码里的点可以是圆形也可以是方形 通过两个角点(图中的5和6)来判断解码(A,B,C,D...)方向。如果角点在宽的两头,每一列的数据读取从上到下。如果角点在高的两头,每一行的数据读取从左往右。 DotCode行业应用 DotCode现在比较多的被用在烟草业。 来源: oschina 链接: https://my.oschina.net/yushulx/blog/3211985

根据某个属性将数组变为二维数组

旧城冷巷雨未停 提交于 2020-03-26 16:02:07
let opArr = [{ id: '1', name: '的' }, { id: '2', name: '地方' }, { id: '3', name: '好' }, { id: '1', name: '就' }, { id: '2', name: '看' }, { id: '1', name: '解决' }, { id: '1', name: '哈哈哈' }] function fac(data, total) { let count = data.filter(v => { return v.id === '1' }) if (count.length === 1) return [data, ...total]; let _data = data.splice(0, data.indexOf(count[count.length - 1])); return fac(_data, [data, ...total]); } let count = fac(opArr, []); console.log(count) 来源: https://www.cnblogs.com/lgjc/p/12574272.html