UE算法收集

2023-11-08

图形类:

  • 是否点在多边形内部
bool IsPointInPolygon(const FVector2D& TestPoint, const TArray<FVector2D>& PolygonPoints)
{
	const int NumPoints = PolygonPoints.Num();
	float AngleSum = 0.0f;
	for (int PointIndex = 0; PointIndex < NumPoints; ++PointIndex)
	{
		const FVector2D& VecAB = PolygonPoints[PointIndex] - TestPoint;
		const FVector2D& VecAC = PolygonPoints[(PointIndex + 1) % NumPoints] - TestPoint;
		const float Angle = FMath::Sign(FVector2D::CrossProduct(VecAB, VecAC)) * FMath::Acos(FMath::Clamp(FVector2D::DotProduct(VecAB, VecAC) / (VecAB.Size() * VecAC.Size()), -1.0f, 1.0f));
		AngleSum += Angle;
	}
	return (FMath::Abs(AngleSum) > 0.001f);
}
  • 测量多边形面积
float MeasurePolyArea(const TArray<FVector>& Locs)
{
	FPoly NewPoly;
	NewPoly.Init();
	for (int i = 0; i < Locs.Num(); i++) {
		NewPoly.Vertices.Add(Locs[i]);
	}
	return NewPoly.Area();
}
  • 获取多边形中心点
//2D
bool GetCenterOfVector2D(const TArray<FVector2D>& Points, FVector2D& Center)
{
	if (Points.Num() == 1)
	{
		Center = Points[0];
		return true;
	}
	else if (Points.Num() >= 2)
	{
		float MinX = Points[0].X, MaxX = Points[0].X;
		float MinY = Points[0].Y, MaxY = Points[0].Y;
		for (const FVector2D& Point : Points)
		{
			MinX = Point.X < MinX ? Point.X : MinX;
			MaxX = Point.X > MaxX ? Point.X : MaxX;
			MinY = Point.Y < MinY ? Point.Y : MinY;
			MaxY = Point.Y > MaxY ? Point.Y : MaxY;
		}
		Center = 0.5 * FVector2D(MaxX + MinX, MaxY + MinY);
		return true;
	}
	return false;
}
//3D
bool GetCenterOfVector(const TArray<FVector>& Points, FVector& Center)
{
	if (Points.Num() == 1)
	{
		Center = Points[0];
		return true;
	}
	else if (Points.Num() >= 2)
	{
		float MinX = Points[0].X, MaxX = Points[0].X;
		float MinY = Points[0].Y, MaxY = Points[0].Y;
		float MinZ = Points[0].Z, MaxZ = Points[0].Z;
		for (const FVector& Point : Points)
		{
			MinX = Point.X < MinX ? Point.X : MinX;
			MaxX = Point.X > MaxX ? Point.X : MaxX;
			MinY = Point.Y < MinY ? Point.Y : MinY;
			MaxY = Point.Y > MaxY ? Point.Y : MaxY;
			MinZ = Point.Z < MinZ ? Point.Z : MinZ;
			MaxZ = Point.Z > MaxZ ? Point.Z : MaxZ;
		}
		Center = 0.5 * FVector(MaxX + MinX, MaxY + MinY, MaxZ + MinZ);
		return true;
	}
	return false;
}
  • 获取圆弧上的点(根据角度)
FVector2D GetPointOnCircle(FVector2D Center, float Radius, float Angle)
{
	float Radian = FMath::DegreesToRadians(Angle);
	return(Center + Radius * FVector2D(FMath::Sin(Radian), FMath::Cos(Radian)));
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UE算法收集 的相关文章

  • c++ /QT 加锁的懒汉式单例

    c 加锁的懒汉式单例 singleton h ifndef SHAREPTR T H define SHAREPTR T H pragma once include
  • Perl Getopt::Long命令行参数传递

    原文链接 https www javatpoint com perl command line arguments The simple command line options are done using s option Comple
  • 数论——欧拉函数

    在数论中 对正整数n 欧拉函数是少于或等于n的数中与n互质的数的数目 此函数以其首名研究者欧拉命名 它又称为Euler s totient function 函数 欧拉商数等 例如 8 4 因为1 3 5 7均和8互质 百度百科词条 欧拉函

随机推荐

  • 虚拟机的启动内核日志

    等有时间了 回来分析下 0 000000 Initializing cgroup subsys cpuset 0 000000 Initializing cgroup subsys cpu 0 000000 Initializing cgr
  • LaTeX各种矩阵输入方法总结

    begin Bmatrix 1 2 4 5 end Bmatrix 结果 1 2
  • 【深度学习图像识别课程】毕业项目:狗狗种类识别(4)代码实现

    本博文涉及以下 六 目录 Zero 导入数据集 一 检测人脸 二 检测狗狗 三 从头实现CNN实现狗狗分类 四 迁移VGG16实现狗狗分类 五 迁移ResNet 50实现狗狗分类 六 自己实现狗狗分类 六 自己实现狗狗分类整体流程 实现一个
  • Modbus常用功能码协议详解

    Modbus常用功能码协议详解 01H 读线圈状态 1 描述 读从机线圈寄存器 位操作 可读单个或者多个 2 发送指令 假设从机地址位0x01 寄存器开始地址0x0023 寄存器结束抵制0x0038 总共读取21个线圈 协议图如下 3 响应
  • 值得收藏的TCP套接口编程文章

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由jackieluo发表于云 社区专栏 TCP客户端 服务器典型事件 下图是TCP客户端与服务器之间交互的一系列典型事件时间表 首先启动服务器 等待客户端连接 启动客户端 连接到
  • 隧道代理实现流量伪装:在数据采集中的应用

    在这篇文章中 我们将一起探讨隧道代理实现的流量伪装以及它在数据采集中的应用 隧道代理可以帮助我们在数据采集过程中隐藏真实的IP地址和网络行为 从而降低被目标网站识别和封禁的风险 让我们一起来了解如何利用隧道代理技术提高爬虫程序的稳定性和可靠
  • el-dialog使用心得

    日常代码开发中 el dialog是我经常使用到的 在某一次检查请求的优化时 突然发现一些本不应该出现的请求 仔细检查后发现了一个自己之前忽略的细节 通常情况下 el dialog的使用有两种方式 方法一 把el dialog写在引入的组件
  • 电磁干扰和空间混叠效应

    电磁干扰 定义 电磁干扰 Electromagnetic Interference EMI 是干扰电缆信号并降低信号完好性的电子噪音 EMI通常由电磁辐射发生源如马达和机器产生 种类 电磁干扰EMI Electromagnetic Inte
  • word/wps分页

    方法1 将需要设置为奇数页的地方 设置为奇数页 方法2 在需要设置为奇数页的后面插入空白页 或偶数页 但不推荐 可以捣鼓捣鼓
  • k8s-kubeadm安装(四、多master安装)

    1 编辑集群配置文件 vi k8s config yaml apiVersion kubeadm k8s io v1beta2 kind ClusterConfiguration kubernetesVersion v1 20 6 vip
  • Maven极简入门

    Maven项目管理 Maven入门 安装地址 http maven apache org download cgi 配置完后可以ctrl r 进入cmd输入命令 mvn v 如果有输出版本信息 则表示成功配置 Maven的优点 如果是普通的
  • 12.Python+selenium实现数据驱动,通过ddt传入数据

    数据驱动概述 数据驱动的定义 相同的测试脚本使用不同的测试数据来执行 测试数据和测试行为完全分离 是一种测试脚本设计模式 实施数据驱动测试步骤 1 编写测试脚本 脚本需要支持从程序对象 文件或数据库读入测试数据 2 将测试脚本使用测试数据存
  • 根据平面方程拟合生成平面三维点云

    平面方程 ground ax by cz d 0 位于相机坐标系 转换到世界坐标系 def gen ground points denorm camera2world ground ax by cz d 0 in camera a b c
  • Linux中jar包的启动脚本解析及问题

    搭建运行环境时 把jar包打好外 我们还需要一个启动脚本 新建一个文件start sh 内容如下 ps ef grep dvmrms grep v grep awk print 2 xargs kill 9 nohup java jar d
  • 【Flask】快速入门后台写接口【API】

    Flask是一个使用Python编写的轻量级Web应用框架 其WSGI工具箱采用Werkzeug 模板引擎则使用Jinja2 Flask使用BSD授权 Flask也被称为 microframework 因为它使用简单的核心 用extensi
  • 支付宝微信在刷脸支付领域两强争霸

    网易2010年就开始从支付领域入局 刚开始主要为集团内的游戏 邮箱等业务提供金融服务 并在早期就拿到了支付牌照 对比起后期才入局的京东 滴滴等来说 起步非常早 对于 余额宝 带来的理财风口 网易金融也都没有错过 市场份额占比超过90 支付宝
  • (一)QCustomPlot常见属性设置、多曲线绘制、动态曲线绘制、生成游标、矩形放大等功能实现

    系列文章目录 提示 这里是该系列文章的所有文章的目录 第一章 一 QCustomPlot常见属性设置 多曲线绘制 动态曲线绘制 生成游标 矩形放大等功能实现 第二章 二 QCustomPlot生成热力图 矩阵颜色图 文章目录 系列文章目录
  • python 实现 PDF 页面横向纵向旋转

    了解RPA www i search com cn 学习RPA https support i search com cn 下面示例代码 是将横向纸张旋转为纵向 根据纸张大小判断纸张方向 from PyPDF2 import PdfFile
  • cart算法 java实现_这个开源项目用Pytorch实现了17种强化学习算法

    强化学习在过去的十年里取得了巨大的发展 如今已然是各大领域热捧的技术之一 今天 猿妹和大家推荐一个有关强化学习的开源项目 这个开源项目是通过PyTorch实现了17种深度强化学习算法的教程和代码库 帮助大家在实践中理解深度RL算法 完整的1
  • UE算法收集

    图形类 是否点在多边形内部 bool IsPointInPolygon const FVector2D TestPoint const TArray