当前位置: 首页 > news >正文

C# 截取两个点之间的线段,等距分割线

  //取线段上两点之间的沿线线段//line 线//startDist:距离线第一个点的起点位置//stopDist:距离线第一个点的终点位置public static List<double[]> lineSliceAlong(List<double[]> line, double startDist, double stopDist){double travelled = 0;double overshot = 0;int origCoordsLength = line.Count;List<double[]> slice = new List<double[]>();//计算for (int i = 0; i < line.Count; i++){//如果起始距离大于,起始点位于的线段,且是最后一段儿则停止。if (startDist >= travelled && i == line.Count - 1) break;//如果 起始点位于的line分段段小于线段长度,且不是line的第一个点else if (travelled > startDist && slice.Count == 0){overshot = startDist - travelled;if (overshot == 0){slice.Add(line[i]);return slice;}//将点沿着向量方向移动距离Vector3 point1 = new Vector3((float)line[i][0], (float)line[i][1], (float)line[i][2]);Vector3 point2 = new Vector3((float)line[i - 1][0], (float)line[i - 1][1], (float)line[i - 1][2]);Vector3 direction = Vector3.Normalize(point1 - point2);Vector3 moveP = point1 + direction * (float)overshot;slice.Add(new double[] { moveP.X, moveP.Y, moveP.Z });slice.Add(new double[] { moveP.X, moveP.Y, moveP.Z });}if (travelled >= stopDist){overshot = stopDist - travelled;if (overshot == 0){slice.Add(line[i]);return slice;}Vector3 point1 = new Vector3((float)line[i][0], (float)line[i][1], (float)line[i][2]);Vector3 point2 = new Vector3((float)line[i - 1][0], (float)line[i - 1][1], (float)line[i - 1][2]);Vector3 direction = Vector3.Normalize(point1 - point2);Vector3 moveP = point1 + direction * (float)overshot;slice.Add(new double[] { moveP.X, moveP.Y, moveP.Z });return slice;}//线段起点if (travelled >= startDist){slice.Add(line[i]);}if (i == line.Count - 1){return slice;}List<double[]> tempLine = new List<double[]> { line[i], line[i + 1] };travelled += LineLength(tempLine);}if (travelled < startDist && line.Count == origCoordsLength){throw new Exception("Start position is beyond line");}double[] last = line[line.Count - 1];var temp = new List<double[]> { last, last };return temp;}//等距分割线public static List<double[]> lineChunck(List<double[]> line, double segmentLength, bool onlySegementPoint = false){List<double[]> result = new List<double[]>();double lineLength = LineLength(line);if (segmentLength <= 0){throw new Exception("segmentLength must be greater than 0");}//如果线比分段短,则返回原始数据if (lineLength <= segmentLength) return line;double numberOfSegments = lineLength / segmentLength;//如果分段不是整数则加1if ((int)numberOfSegments != numberOfSegments){numberOfSegments = Math.Floor(numberOfSegments) + 1;}for (int i = 0; i < numberOfSegments; i++){var outLine = lineSliceAlong(line, segmentLength * i, segmentLength * (i + 1));if (onlySegementPoint){result.Add(outLine.First());result.Add(outLine.Last());}else{for (int j = 0; j < outLine.Count; j++){var v = outLine[j];result.Add(v);}}}return distinctPoints(result);}//点去重public static List<double[]> distinctPoints(List<double[]> triplets){return triplets.Distinct(new TripletComparer()).ToList();}private class TripletComparer : IEqualityComparer<double[]>{public bool Equals(double[] x, double[] y){if (x.Length != y.Length) return false;for (int i = 0; i < x.Length; i++){if (x[i] != y[i]) return false;}return true;}public int GetHashCode(double[] obj){unchecked // Overflow is fine, just wrap{int hash = 17;foreach (var val in obj){hash = hash * 23 + val.GetHashCode();}return hash;}}}

相关文章:

C# 截取两个点之间的线段,等距分割线

//取线段上两点之间的沿线线段//line 线//startDist:距离线第一个点的起点位置//stopDist:距离线第一个点的终点位置public static List<double[]> lineSliceAlong(List<double[]> line, double startDist, double stopDist){double travelled 0;double overshot …...

打造聊天流式回复效果:Spring Boot+WebSocket + JS实战

本篇博客将带领你使用 Spring Boot、WebSocket 和 JavaScript 实现一个类似 ChatGPT 的流式回复效果。前端发送消息后&#xff0c;后端接收消息并请求 AI API&#xff0c;并将 AI 返回的流式响应实时推送到前端&#xff0c;最终在聊天界面呈现出逐字出现的打字效果。 技术原理…...

202年版最新Python下载安装+PyCharm下载安装激活和使用教程!(附安装包+激活码)

一、Python解释器下载【运行环境】 Python官网&#xff1a; https://www.python.org Python各版本解释器官网&#xff1a; https://www.python.org/downloads/ 二、Windows系统安装Python解释器 下载Python版本解释器 现在已经更新到了3.13版本的Python解释器&#xff0c;但…...

【面试宝典】spring常见面试题总结[上]

一、什么是 Spring 框架&#xff1f; Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。 Spring 帮助开发者解决基础性的问题&#xff0c;使开发者专注编写业务代码。 二、Spring Freamework 有哪些功能&#xff1f; IOC: 控制反转AOP: 面…...

NC单链表的排序

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 给定一个节点…...

阿里云部署open-webui实现openai代理服务(持续更新)

一、展示 xiezhaoxuan.top:8080 二、 环境准备 1. 阿里云服务器,ubuntu22系统 2. http代理(可访问外网) 3. openai API Key 三、实际操作记录(阿里云服务器端) 1. 根据官方文档安装open-webui服务端(看完这节再操作): 🚀 Getting Started | Open WebUI 1. 如果服务器配置比较…...

Vue3简介和快速体验

文章目录 前言1. Vue3介绍2. Vue3快速体验(非工程化方式) 前言 本次主要用VScode开发代码&#xff0c;vscode的安装很简单&#xff0c;不会的可以查询一下网上的资料 1. Vue3介绍 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于…...

LeetCode98 验证二叉搜索树

前言 题目&#xff1a; 98. 验证二叉搜索树 文档&#xff1a; 代码随想录——验证二叉搜索树 编程语言&#xff1a; C 解题状态&#xff1a; 对中序遍历理解不到位 思路 了解了中序遍历会返回一个有序数组后&#xff0c;本题就可以迎刃而解。只需要判断&#xff0c;返回的数组…...

llama的神经网络结构;llama的神经网络结构中没有MLP吗;nanogpt的神经网络结构;残差是什么;残差连接:主要梯度消失

目录 解释代码 潜在问题和修正 结论 llama的神经网络结构 神经网络结构概述 举例说明 llama的神经网络结构中没有MLP吗 nanogpt的神经网络结构 1. 词嵌入层(Embedding Layer) 2. Transformer编码器层(Transformer Encoder Layer) 3. 层归一化(Layer Normalizat…...

函数的常量引用入参const saclass sdf,可否传入一个指向saclass对象的指针 shared_ptr<saclass>

不可以直接将一个指向 saclass 对象的 shared_ptr<saclass> 作为参数直接传入一个期望 const saclass& 类型参数的函数。原因是类型不匹配&#xff1a;shared_ptr<saclass> 是一个智能指针类型&#xff0c;它封装了对 saclass 对象的指针&#xff0c;并提供了一…...

数据库:SQL——数据库操作的核心语言

数据库&#xff1a;SQL——数据库操作的核心语言 SQL&#xff08;结构化查询语言&#xff09;是关系型数据库管理系统中的标准语言&#xff0c;广泛用于数据的定义、操作、控制和查询。SQL 包含多个子语言&#xff0c;分别用于不同的数据库操作任务&#xff0c;包括数据定义&a…...

Unity + HybridCLR 从零开始

官方文档开始学习,快速上手 | HybridCLR (code-philosophy.com)是官方文档链接 1.建议使用2019.4.40、2020.3.26、 2021.3.0、2022.3.0 中任一版本至于其他2019-2022LTS版本可能出现打包失败情况 2. Windows Win下需要安装visual studio 2019或更高版本。安装时至少要包含 使…...

C++小总结

C小总结 接口 对外暴露头文件中&#xff0c;只需要声明接口函数即可&#xff0c;其他不暴露的函数不需要进行声明。接口的参数使用指针形式比较好&#xff0c;因为外部使用时可以对实参进行创建和析构&#xff0c;如果非接口函数使用new开辟&#xff0c;不太好进行析构。在使…...

从快到慢学习Git指令

Git是现在最流行的版本控制工具之一。无论是在开源社区还是企业软件开发中,Git都扮演着至关重要的角色。本文将根据不同的需求,分别提供快速上手和深入学习Git的指南。 如果你只想下载代码 如果你只是想下载GitHub或其他代码仓库的代码,那你只需要了解以下两个命令: git clo…...

传奇游戏发布渠道

传奇游戏发布渠道 回答&#xff1a;游戏发布平台|手机游戏发布平台 传奇游戏发布渠道作为游戏开发商直接控制的信息传播途径&#xff0c;其安全性自然有着较高的保障。首先&#xff0c;渠道通常会采用先进的加密技术和安全协议来保护数据传输过程中的安全&#xff0c;防止信息…...

如何有效阅读科研论文【方法论】

如何读论文【论文精读1】_哔哩哔哩_bilibili 如何有效阅读科研论文 科研论文是了解学术领域最新研究成果和技术发展的重要途径。有效地阅读论文不仅能够帮助我们掌握前沿知识&#xff0c;还能提升自己的研究能力。本文将介绍一种系统的论文阅读方法&#xff0c;并通过具体的步…...

【揭秘】层层加码,竟能加速渠道营销数字化?-eBest

国潮饮料品牌在eBest RTM系统的支持下&#xff0c;已经将数字化贯彻到每一个销售环节&#xff0c;且看eBest如何通过“层层加码”&#xff0c;进一步加速该饮料品牌渠道数字化进程&#xff0c;实现弯道超车&#xff1f; “一箱四码”垛码 五码实现渠道数字化 为提高营销和数字…...

基于WAMP环境的简单用户登录系统实现(v3版)(持续迭代)

目录 版本说明 实现环境&#xff1a; 流程逻辑框图&#xff1a; 数据库连接 登录页面&#xff1a;login.html 登录处理实现&#xff1a;doLogin.php 用户欢迎页面&#xff1a;welcome.php 密码修改页面&#xff1a;change_password.html 修改处理&#xff1a;doChangePa…...

大语言模型与多模态大模型loss计算

文章目录 前言一、大语言模型loss计算1、loss计算代码解读2、构建模型输入内容与label标签3、input_ids与labels格式 二、多模态大模型loss计算方法1、多模态loss计算代码解读2、多模态输入内容2、大语言模型输入内容3、图像embending如何嵌入文本embeding 前言 如果看了我前面…...

线上研讨会 | CATIA助力AI提升汽车造型设计

报名链接&#xff1a; 2024探索之旅第二季...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

当下AI智能硬件方案浅谈

背景&#xff1a; 现在大模型出来以后&#xff0c;打破了常规的机械式的对话&#xff0c;人机对话变得更聪明一点。 对话用到的技术主要是实时音视频&#xff0c;简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术&#xff0c;开发自己的大模型。商用方案多见为字节、百…...

6.9本日总结

一、英语 复习默写list11list18&#xff0c;订正07年第3篇阅读 二、数学 学习线代第一讲&#xff0c;写15讲课后题 三、408 学习计组第二章&#xff0c;写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语&#xff1a;复习l默写sit12list17&#…...