当前位置: 首页 > 软件库 > 程序开发 > 数学计算 >

xtorcga

3D 计算几何算法库
授权协议 MIT
开发语言 JavaScript HTML/CSS
所属分类 程序开发、 数学计算
软件类型 开源软件
地区 国产
投 递 者 钦英发
操作系统 跨平台
开源组织
适用人群 未知
 软件概览
JavaScript 实现计算机几何算法库,实现比如像距离、相交、包含、偏移、平行垂直判断、正负位置等算法。 

演示地址

案例:

文档与演示(国内镜像)网速快

文档与演示(github)

使用

  • 全部引用;:
import * as cga from "xtorcga";
function randomV3() {
  return cga.v3(
    Math.random() * 100 - 50,
    Math.random() * 100,
    Math.random() * 100 - 50
  );
}

var point = new cga.Point().copy(randomV3());
var seg = new cga.Segment(randomV3(), randomV3());
var result = point.distanceSegment(seg);
  • 按需求引用:
import { v3, Point, Segment } from "xtorcga";
function randomV3() {
  return v3(
    Math.random() * 100 - 50,
    Math.random() * 100,
    Math.random() * 100 - 50
  );
}

var point = new Point().copy(randomV3());
var seg = new Segment(randomV3(), randomV3());
var result = point.distanceSegment(seg);
  • 网页嵌入:直接下载使用 build 目录下面的 cga.js,包含到项目中
<script src="cga.js" />
或者
<script src="https://raw.githack.com/yszhao91/xtorcga/master/build/cga.js" />
<script>
  var point = new cga.Point(1, 2, 3);
  var line = new cga.Line(
    new cga.Vector3(10, 10, 20),
    new cga.Vector3(20, 15, 10)
  );
  var result = point.distanceLine(line);
</script>

项目编译

npm install
国内
cnpm install

npm run build //编译到build目录下
npm run dev  //运行项目,自己更改源码测试

对象的类名

  1. 点:Point
  2. 直线:Line
  3. 射线:Ray
  4. 线段:Segment
  5. 圆圈:Circle
  6. 平面:Plane
  7. 三角形:Triangle
  8. 矩形:Rectangle
  9. 圆盘:Disk
  10. 球体:Sphere
  11. 胶囊体: Capsule
  12. 包围盒:Box

已经实现算法

在同一平面点集的凸包

已完成

var convexHull = new ConvexHull(points, { planeNormal: cga.Vector3.UnitZ });
var hull = convexHull.hull;

3d 凸包

进行中

同一平面点集 delauny 三角网构建

进行中

3d 点集 delauny 四面体构建

进行中

同一平面 voronoi 图构建

进行中

3d voronoi 图构建

进行中

最近点对问题

点集合中最近找出距离最近的一对点 算法时间 O(nlogn)

进行中

折线或者路径简化

折线或者路径中过密或者过直的点去除;
(2020 年 1 月 17 增加)
/**
 * 简化点集数组,折线,路径
 * @param {*} points 点集数组,折线,路径 ,继承Array
 * @param {*} maxDistance  简化最大距离 默认值0.1
 * @param {*} maxAngle  简化最大角度 弧度 默认值 Math.PI / 180 * 5
 */
simplifyPointList(points, maxDistance, maxAngle);

距离

一级目录与二级目录存在相应距离算法关系

  • Point
    • Point
    • Line
    • Ray
    • Segment
    • Circle
    • Plane
    • Triangle
    • Rectangle
    • Disk
    • Sphere
    • Capsule
  • Line
    • Line
    • Ray
    • Segment
    • Triangle (2020 年 1 月 17 增加)
  • Ray
    • Ray
    • Segment
    • Triangle (2020 年 1 月 17 增加)
  • Segment
    • Segment

相交

相交可以使用距离算法来实现,准确的说距离中的 closets 最近点在 distance 为 0(小于 1e-4,精度可以自定义)的时候也就是交点,parameters 表为 0 或 1 可以判断为端点相交

偏移

  • Segment

切割

  • Segment
    • Segment
  • Plane
    • Segment
    • Triangle

参考文章

计算机几何算法(CGA)专栏 https://zhuanlan.zhihu.com/c_1196384168014368768

 相关资料
  • 我正在使用ModBus RTU,并试图找出如何计算CRC16。我不需要代码示例。我只是对机制很好奇。我已经了解到,基本的CRC是数据字的多项式除法,根据多项式的长度,用零填充。下面的测试示例应该检查我的基本理解是否正确: 数据字:01001011 多项式:1001(x3+1) 由于最高指数x3而被填充3位 计算:0100 1011 000/1001->余数:011 计算。 null 第二次尝试:由

  • 面向对象设计模式 泛化(概化):表示把几类对象类的公共属性和行为抽象成超类,然后其属性和方法被那些子类继承 聚合:表示一个较大的“整体”类包含一个或多个较小的“部分”类 合成:表示关系中“整体”负责其“部分”的创建和销毁,如果“整体”不存在了,“部分”也将不存在。 单例:保证一个类仅能够生成一个对象 组合:表示“部分-整体”的层次结构,并且对部分和整体的使用具有一致性 装饰:动态地给一个对象增加一

  • 本文向大家介绍Java算法之递归算法计算阶乘,包括了Java算法之递归算法计算阶乘的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享的java算法计算阶乘,在学习Java课程时经常会遇到求阶乘问题,今天接跟大家一起探讨一下 代码如下: 运行结果:

  • 问题内容: 给定一个星期数,例如,您如何计算从星期一开始的那一周中的天数? 第40周的rfc-3339输出示例: 问题答案: PHP 下面的帖子是因为我是个白痴,没有正确阅读问题,但是会获得从星期一开始的一周中的日期,给出的是日期,而不是星期数。 在PHP中 ,改编自PHP日期手册页上的这篇文章 来自的输出:

  • 我需要计算和的中位数。但是,要计算每个中位数,我必须包括具有相同面和相同类别的所有行。例如,要计算第二行的中位数,我必须包括行 2 和 3,因为我在第 2 行和第 3 行中具有相同的面和 。我正在尝试使用循环函数,但我不知道如何包含此条件。 这就像一个条件中位数。 非常感谢您的关注。 这里,就是例子:

  • 问题内容: 我正在尝试使用HMAC-SHA256算法创建签名,这是我的代码。我正在使用美国ASCII编码。 我从上面的代码中得到的结果是: 这与Wiki中显示的相同 除外 的。 如果我做对了所有事情,或者可能可以改善我的代码,我正在寻找想法/意见。 问题答案: 0x仅表示其后的字符表示一个十六进制字符串。 因此,0x只是为了阐明输出的格式,而无需担心它。

  • 我已经通过谷歌和堆栈溢出搜索,但我没有找到一个关于如何计算时间复杂度的清晰而直接的解释。 说代码像下面这样简单: 说一个像下面这样的循环: 这将只执行一次。 时间实际上被计算为而不是声明。

  • Itinerary类存储有关具有以下成员的旅程的信息: •一个名为flights的私有ArrayList数据字段,其中包含按DepartureTime递增顺序排列的旅程航班。(提示:您不需要进行排序。) •使用ArrayList类型的指定航班创建旅程的构造函数。 •名为getTotalFlightTime()的方法,以分钟为单位返回旅程的总飞行时间。(提示:为每个飞行对象调用getFlightTi