CurvePrimitive

常用的见下

LineSegment3d直线段两点直线边、杆件、骨架
LineString3d折线多点连续直线轮廓线、路径
Arc3d圆弧 / 椭圆弧圆心 + 半径 + 起止角圆孔、圆角、弧段
BezierCurve3d贝塞尔曲线端点 + 控制点平滑过渡、动画轨迹
BSplineCurve3dB 样条 / NURBS控制点 + 节点矢量车身曲面、流线

LineSegment3d

示例代码 LineSegment3d

核心部分,如何创建线段,及如何根据比例取点

  • 一条 LineSegment3d,由起点 pointA 和终点 pointB 组成。

  • fraction:一个 归一化参数

    • 0.0 → 起点

    • 1.0 → 终点

    • 0.5 → 线段中点

    • 可超范围:-0.21.3 等会得到延长线上的点。

import { LineSegment3d, Point3d } from "@itwin/core-geometry";export default class SimpleLineApi {public static createLineSegmentFromXY(point1X: number, point1Y: number, point2X: number, point2Y: number): LineSegment3d {const pointA = Point3d.create(point1X, point1Y, 0);const pointB = Point3d.create(point2X, point2Y, 0);return LineSegment3d.create(pointA, pointB);}public static createPointsAlongLine(lineSegment: LineSegment3d, fractionsAlongLine: number[]): Point3d[] {const points: Point3d[] = [];for (const fractionAlongLine of fractionsAlongLine) {const pointAlongLine = lineSegment.fractionToPoint(fractionAlongLine);points.push(pointAlongLine);}return points;}
}

LineString3d

连续线段集合

import { LineString3d, Point3d } from "@itwin/core-geometry";// 1. 从点数组
const ls = LineString3d.create([Point3d.create(0, 0, 0),Point3d.create(1, 2, 3),Point3d.create(4, 5, 6)
]);// 2. 两点起止
const ls2 = LineString3d.create(Point3d.create(0,0), Point3d.create(10,0), Point3d.create(10,10));// 3. 空折线再 push
const ls3 = LineString3d.create();
ls3.pushXYZ(1,2,3);
ls3.pushXYZ(4,5,6);

Arc

Arc3d.create(center, vectorU, vectorV, AngleSweep.createStartEndDegrees(0, 90))

把圆心、半径向量、垂直向量及起止角度交给 Arc3d.create,即可得到一条位于任意 3D 平面中的圆弧。

参数作用典型取值
center圆心坐标{x:0, y:0, z:0}
vectorX半径向量 + X 轴方向长度 = 半径,例如 Vector3d.create(5,0,0)
vectorY与 vectorX 垂直,定义平面例如 Vector3d.create(0,5,0)
sweepStartEnd两元素的数组 [startDeg, endDeg][0, 90] 表示 0° 到 90° 的圆弧

 

其余的一些对外函数,所以iTwin并不是只能去获取几何,还有大量的函数

类别函数签名(简写)一句话作用
构造函数Arc3d.create(center, vector0, vector90, sweep)用圆心 + 两正交向量 + 角度范围建圆弧
Arc3d.createXY(center, radius, sweep?)快速建 X-Y 平面圆弧
Arc3d.createXYZ(center, radius, sweep?)快速建 X-Y-Z 空间圆弧
Arc3d.createUnitCircle()单位圆(半径 1,0-360°)
Arc3d.fromJSON(json)反序列化恢复圆弧
Arc3d.createCircularStartMiddleEnd(start, middle, end)三点定圆弧
读取属性arc.center : Point3d圆心坐标
arc.vector0 : Vector3d0° 方向半径向量
arc.vector90 : Vector3d90° 方向半径向量
arc.sweep : AngleSweep起止角对象
arc.radiusXY : number平均半径
arc.curveLength()弧长
arc.fractionToPoint(f)比例 0-1 取点
arc.fractionToPointAndDerivative(f)取点 + 切线
arc.closestPoint(spacePt)空间点到圆弧最近点
arc.isCircular : boolean是否整圆(360°)
变换 / 复制arc.clone()深拷贝
arc.cloneTransformed(transform)变换后拷贝
arc.reverseInPlace()就地反转起止角
几何操作arc.constructOffset(distance, method?)生成等距圆弧
arc.constructCircularArcChainApproximation(options)圆弧 → 多段小圆弧近似
arc.extendToStartEnd(start, end)延伸/裁剪到起止点
arc.getRange()返回包围盒 Range3d
交互 / 判断arc.isAlmostEqual(other)几何相等比较
arc.intersectRay3d(ray)与射线求交
arc.intersectPlane(plane)与平面求交
arc.intersectRange(range)与包围盒求交

BezierCurve3d

Bezier示例

不好意思这个例子很多函数名没改。。。。但是我不想改了。。

伯恩斯坦多项式

成员返回值一句话作用
curve.controlPoints : Point3d[]控制点数组直接拿到当前控制点
curve.order : number阶数2=二次,3=立方
curve.curveLength()近似弧长快速积分长度
curve.fractionToPoint(f)Point3d比例 0-1 取点
curve.fractionToPointAndDerivative(f){point,derivative}取点 + 切线
curve.closestPoint(spacePt){point,fraction}空间点到曲线最近

BSplineCurve3d

B样条曲线示例

Loop

是由折线(或任意曲线链)首尾闭合形成的“环”,比如面域边界、孔洞、截面轮廓

把折线变 Loop(强制闭合)

import { Loop, LineString3d } from "@itwin/core-geometry";const ls = LineString3d.create([p0, p1, p2, p0]); // 首尾同点
const loop = Loop.create(ls);                     // 生成闭合环

从 Loop 取回折线

const lsAgain = loop.children[0] as LineString3d;

Path

Path 是一个可以混装任意曲线类型不强制闭合开放曲线链(poly-curve),比如布线、扫描路径、拉伸轨迹。它只表示一条“路径”,不包围任何区域;若要围成区域,请用 Loop。

会把多种线类型,如线段和弧,拼接成一个Path,然后用Decorator来渲染,用作路径展示之类

import { LineString3d, Arc3d, Path } from "@itwin/core-geometry";const ls   = LineString3d.create([p0, p1]);
const arc  = Arc3d.createXY(Point3d.create(2,0), 3);const path = Path.create(ls, arc);  // 折线 + 圆弧 连成开放链
console.log(path.curveLength());

其他的例子

几何的例子

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917125.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917125.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917125.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iPhone 恢复出厂设置是否会删除所有内容?

当你的 iPhone 经常崩溃、出现黑屏死机、卡在加载屏幕上等问题时,你可能会考虑进行恢复出厂设置来修复它。或者在其他情况下,如果你要将使用多年的设备交给新主人,出于安全考虑,也需要进行恢复出厂设置。那么,恢复出厂…

机器学习②【字典特征提取、文本特征处理(TF-IDF)、数据标准化与归一化、特征降维】

文章目录先言一、特征工程概述二、特征提取1.字典特征提取(特征离散化)2.文本特征提取2.1英文文本提取2.2中文文本提取(jieba分词器)3.TfidfVectorizer TF-IDF文本特征词的重要程度特征提取三、数据归一化与标准化1.MinMaxScaler …

3、CC3200串口DMA

先说下CC3200存在2个16*8的fifos, 分别用于发送和接收 当fifos被disable时,将会作为一个1字节深度的保持寄存器, 所以无论fifos是开是关,发送和接收都绕不开fifos DMA 由于发送和接收都绕不过fifos,所以DMA也绕不开FIFOS. MAP_UARTFIFOLevelS…

从游戏NPC到手术助手:Agent AI重构多模态交互,具身智能打开AGI新大门

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)【陈敬雷编著】【清华大学出版社】 清华《GPT多模态大模型与AI Agent智能体》书籍配套视频课程【陈敬雷…

Lesson 29 Taxi!

Lesson 29 Taxi! taxi n.出租车 同义词:cab n.出租车 相关:taxi meter计价器 taxi stand taxi rank 出租车站 call ataxi 叫车,打车 例句:对不起,请问出租车站在哪里? Excuse me, do you know where the taxi rank is please? land v.着陆,登陆n.陆地…

怎样将allegro的brd文件转化为AD的PCB文件

由于工作需要将allegro的PCB转成ad给同事,在使用AD软件导入Allegro的brd格式文件时出现各种的异常报错弹窗问题,现分享两种将Allegro PCB文件导入到AD中的方法。一、第1种方法使用高版本的AD软件(AD22,同时操作电脑需安装了Allegr…

[免费]【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts)【论文+源码+SQL脚本】

大家好,我是python222_小锋老师,看到一个不错的【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts),分享下哈。 项目视频演示 【免费】【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts爬虫) Pytho…

什么是CI/CD?

CI/CD是持续集成(Continuous Integration)和持续交付/持续部署(Continuous Delivery/Continuous Deployment)的缩写:持续集成(Continuous Integration, CI):CI是一种开发实践&#x…

【Linux】重生之从零开始学习运维之Mysql

一主一从主12主机准备工作mkdir -p /data/mysql/logbin chown -R mysql:mysql /data/mysql主节点mysql配置vim /etc/my.cnf.d/mysql-server.cnf server-id177 log_bin/data/mysql/logbin/mysql-bin default_authentication_pluginmysql_native_password查看效果systemctl resta…

Trust Management System (TMS)

Trust Management System (TMS)信托管理系统学习信托管理系统(TMS)是一种用于高效管理信托业务的综合平台,涵盖客户信息、资产配置、风险监控等功能。通过学习TMS,可以掌握信托产品设计、业务流程优化及合规…

Spring Boot中使用Bouncy Castle实现SM2国密算法(与前端JS加密交互)

Spring Boot中使用Bouncy Castle实现SM2国密算法(与前端JS加密交互)一、环境准备二、核心实现三、前后端交互流程四、关键问题解决方案五、常见问题排查六、最佳实践建议在现代Web应用中,数据安全传输至关重要。SM2作为我国自主设计的非对称加…

机器学习sklearn:随机森林的决策树

bg:对比决策树来说,搞多几棵树就是随机森林了rlf_1 [] rlf_2 [] for i in range(10):rfc RandomForestClassifier(n_estimators25)rfc_s cross_val_score(rfc, wine.data, wine.target, cv10).mean()rlf_1.append(rfc_s)clf DecisionTreeClassifier…

上海月赛kk

1.十六进制#include<bits/stdc.h> using namespace std;int n;int main(){cin>>n;stack<int>re;if(n<16)cout<<0;while(n){re.push(n%16);n/16;}while(!re.empty()){int xre.top();re.pop();if(x<10)cout<<x;else cout<<char(Ax-10)…

暑期算法训练.12

目录 52. 力扣1 两数之和 52.1 题目解析&#xff1a; 52.2 算法思路&#xff1a; 52.3 代码演示&#xff1a; ​编辑 52.4 总结反思&#xff1a; 53 面试题&#xff1a;判定是否互为字符重排 53.1 题目解析&#xff1a; 53.2 算法思路&#xff1a; 53.3 代码演示&…

MySQL时间处理完全指南:从存储到查询优化

时间是数据库中最活跃的数据维度之一&#xff0c;正确处理时间数据关系到系统稳定性、数据分析准确性和业务逻辑正确性。本文将深入剖析MySQL时间处理的完整知识体系。一、MySQL时间数据类型详解1. 核心时间类型对比类型存储空间范围特性时区影响DATE3字节1000-01-01~9999-12-3…

Text2SQL 智能问答系统开发-预定义模板(二)

背景 在构建一个支持多轮对话的 Text2SQL 系统过程中&#xff0c;我完成了以下关键功能&#xff1a; 已完成 基础 Text2SQL 功能实现 实现用户输入自然语言问题后&#xff0c;系统能够自动生成 SQL 并执行返回结果。用户交互优化 支持用户通过补充信息对查询进行调整&#xff0…

JavaScript 异步编程:Promise 与 async/await 详解

一、Promise 1. 什么是 Promise&#xff1f; Promise 是 JavaScript 中用于处理异步操作的对象&#xff0c;它代表一个异步操作的最终完成&#xff08;或失败&#xff09;及其结果值。 2. Promise 的三种状态 ​​Pending&#xff08;待定&#xff09;​​&#xff1a;初始状态…

OS架构整理

OS架构整理引导启动部分bios bootloader区别启动流程&#xff08;x86 BIOS 启动&#xff09;&#xff1a;biosboot_loader3.切换进保护模式实模式的限制如何切换进保护模式加载kernel到内存地址1M加载内核映像文件elf一些基础知识链接脚本与代码数据段创建GDT表段页式内存管理显…

【WRF-Chem第二期】WRF-Chem有关 namelist 详解

目录namelist 选项&#xff1a;chem_opt 的选择其他化学相关的 namelist 选项气溶胶光学属性与输出边界与初始条件配置&#xff08;气体&#xff09;参考本博客详细介绍 WRF-Chem有关 namelist 选项。 namelist 选项&#xff1a;chem_opt 的选择 chem_opt 是什么&#xff1f;…

STM32-USART串口实现接收数据三种方法(1.根据\r\n标志符、2.空闲帧中断、3.根据定时器辅助接收)

本章概述思维导图&#xff1a;USART串口初始化配置串口初始化配置在&#xff08;STM32-USART串口初始化章节有详细教程配置&#xff09;&#xff0c;本章不做讲解直接代码示例&#xff0c;本章重点在于串口实现接收数据三种方法&#xff1b;配置USART1串口接收初始化函数步骤&a…