3D项目中用到的一些算法

news/2024/10/31 1:26:00/

判断点是否在多边形内部(冬奥)
(1)面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。
(2)夹角和判别法:判断目标点与所有边的夹角和是否为360度,为360度则在多边形内部。
(3)引射线法:从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。
判断点是否在四边形内部(冬奥)

pointInRect(areaVertex, pos){// 四边形内的点都在顺时针(逆时针)向量的同一边,即夹角小于90o,向量积同向。var A = areaVertex[0], B = areaVertex[1], C = areaVertex[2], D = areaVertex[3];var x = pos.x, y = pos.z;var a = (B[0] - A[0])*(y - A[1]) - (B[1] - A[1])*(x - A[0]);var b = (C[0] - B[0])*(y - B[1]) - (C[1] - B[1])*(x - B[0]);var c = (D[0] - C[0])*(y - C[1]) - (D[1] - C[1])*(x - C[0]);var d = (A[0] - D[0])*(y - D[1]) - (A[1] - D[1])*(x - D[0]);if((a > 0 && b > 0 && c > 0 && d > 0) || (a < 0 && b < 0 && c < 0 && d < 0)) {return true;}return false; }

计算点到直线的距离(冬奥)

pointToLine(line, point){// 计算点到直线的最短距离;let p1 = line[0], p2 = line[1], p3 = point;var A = (p1[1] - p2[1]) / (p1[0] - p2[0]);var B = p1[1] - A * p1[0];return Math.abs((A * p3.x + B - p3.z) / Math.sqrt(A * A + 1));}

计算点到线段的最短距离(冬奥)

已知当前绕Y轴的角度值(绕x,z角度均为0),求解方向向量(x,y,z)

let modR = mod.transform.rotationEuler.y / 180 * Math.PI;
let x = -Math.sin(modR);
let z = -Math.cos(modR);
this.rigidBody.move(new Laya.Vector3(x / 100 * this.speed * this.devSpeed, 0, z / 100 * this.speed * this.devSpeed));

已知向量a,b,求解a,b向量的夹角,及a在b向量的顺时针方向还是逆时针方向

let cosAlpha = Laya.Vector3.dot(aV,bV) / (Laya.Vector3.scalarLength(aV) * Laya.Vector3.scalarLength(bV));
let alpha = Math.acos(cosAlpha);// 此值始终大于0小于Math.PI;
let cross = (aV.x * bV.z - bV.x * aV.z);
let g = cross > 0 ? -0.03 : 0.03;// aV在bV的逆时针方向为-0.03;aV在bV的顺时针方向为0.03;

已知两点a,b,计算两点延长线上的某一点(延长距离为dis)(灯笼)
var c = a - b;
c.normalize();
a + c*dis;

圆方程(摇杆)
x平方 + y平方 = z平方


http://www.ppmy.cn/news/97624.html

相关文章

Oracle数据库从入门到精通系列之十:基于Docker部署Oracle数据库19c的详细步骤

Oracle数据库从入门到精通系列之十:基于Docker部署Oracle数据库19c的详细步骤 一、下载Oracle数据库19c镜像二、查看Oracle数据库19c的镜像三、创建Oracle数据库19c的数据目录四、启动Oracle19c数据库容器五、查看Oracle19c数据库容器启动日志六、查看密码修改脚本七、修改sys…

Baumer工业相机堡盟工业相机使用BGAPISDK将工业相机设为Burst模式以及该模式的优势以及行业应用(C#)

Baumer工业相机堡盟工业相机使用BGAPISDK将工业相机设为Burst模式以及该模式的优势以及行业应用&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的Burst模式的技术背景Baumer工业相机使用BGAPISDK将设置Burst模式1.引用合适的类文件2.使用BGAPI SDK初始化相机设置Bur…

uni-app常用场景速查记录

记录一下uniapp开发过程中遇到的问题场景,方便后期查看. 1.elementUI中textarea文本如何设置换行显示 2.uniapp中实现文字滚动显示 3.下拉刷新和触底分页查询 1.elementUI中textarea文本设置换行显示 el-input标签中type为textarea中录入的文本内容,在表格中显示…

Prometheus之exporter详解

何为exporter Prometheus 监控基于一个很简单的模型: 主动抓取目标的指标接口(HTTP 协议)获取监控指标, 再存储到本地或远端的时序数据库. Prometheus 对于指标接口有一套固定的格式要求, 格式大致如下: # HELP http_requests_total The total number of HTTP requests. # TYPE…

【21】SCI易中期刊推荐——计算机科学人工智能领域(中科院4区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…

Android 12.0SystemUI 状态栏下拉和通知栏始终居中

1.概述 在12.0的产品定制化开发中,在系统原生的SystemUI 状态栏下拉和通知栏,默认是根据手势的x 坐标的位置居中显示,但是如果太靠两边感觉不太好,下拉太靠边不太好看所以产品提出不管手势在哪里下滑 都要去下拉和通知栏居中显示 会比较好看些 下面就来实现这个需求 2.Sy…

Elasticsearch:验证 Elasticsearch Docker 镜像并安装 Elasticsearch

Elasticsearch 可以作为 Docker 镜像使用。 www.docker.elastic.co 上提供了所有已发布的 Docker 图像和标签的列表。 源文件在 Github 中。此软件包包含免费和订阅功能。 开始 30 天试用以试用所有功能。 从 Elasticsearch 8.0 开始&#xff0c;默认启用安全性。 启用安全性后…

CSS函数大全

1.attr()获取HTML 属性值 用来获取选择到的元素的某一 HTML 属性值&#xff0c;并用于其样式。它也可以用于伪元素&#xff0c;属性值采用伪元素 所依附的元素。 attr() 理论上能用于所有的 CSS 属性但 目前支持的仅有 伪元素的 content 属性 &#xff0c;其他的属性和高 级…