13新功能:几何计算
两年前,我们发布了beplay体育官网下载app.下面是自那时以来几何计算的更新,包括13.0中的最新特性。本文内容编译自Stephen Wolfram的文章beplay体育手机官网安卓版发布公告对于12.1,12.2,12.3和13.0。
欧几里得几何走向互动(2020年12月)
Version 12.0的主要进步之一是引入了欧几里得几何的符号表示:您可以指定一个符号GeometricScene,给出了各种对象和约束,Wolfram语言可以“解决”它,并绘制出满足约束的随机实例的图。beplay体育官网下载appbeplay体育手机官网安卓版在版本12.2中,我们将其变成交互式的,因此您可以移动图中的点,并且所有内容(如果可能的话)都将交互式地重新排列,以维护约束。
下面是一个简单几何场景的随机实例:
![]()
& # 10005
RandomInstance[GeometricScene[{a, b, c, d}, {CircleThrough[{a, b, c}, d], Triangle[{a, b, c}], d ==中点[{a, c}]}]] |
如果你移动其中一个点,其他点将交互地重新排列,以保持几何场景的符号表示中定义的约束:
![]()
& # 10005
RandomInstance[GeometricScene[{a, b, c, d}, {CircleThrough[{a, b, c}, d], Triangle[{a, b, c}], d ==中点[{a, c}]}]] |
这里到底发生了什么?基本上,几何被转换成代数。如果你愿意,你可以得到代数公式
![]()
& # 10005
%(“AlgebraicFormulation”) |
不用说,您可以使用Wolfram语言的许多强大的代数计算功能来操作它。beplay体育官网下载appbeplay体育手机官网安卓版
除了交互性之外,12.2的另一个主要新特性是不仅能够处理完整的几何场景,还能够处理包括分多个步骤构建场景的几何构造。这里有一个例子,恰好是直接拿出来的从欧几里得:
![]()
& # 10005
RandomInstance[GeometricScene[{{\[FormalCapitalA], \[FormalCapitalB], \[FormalCapitalC], \ \[FormalCapitalD], \[FormalCapitalA], \[FormalCapitalF]}, {}}, {GeometricStep[{Line[{\[FormalCapitalA], \[FormalCapitalB]}], Line[{\[FormalCapitalA], \[FormalCapitalC]}]}, "定义任意角度BAC。", GeometricStep[{\[FormalCapitalD] \[Element] Line[{\[FormalCapitalA], \[FormalCapitalB]}], \[formalcapitalale] \ \[Element] Line[{\[FormalCapitalA], \[FormalCapitalC]}], EuclideanDistance[\[FormalCapitalA], \[FormalCapitalD]] == EuclideanDistance[\[FormalCapitalA], \[FormalCapitalA]]}, "将D和E放在AB上,AC与a等距", GeometricStep[{Line[{\[FormalCapitalD], \[FormalCapitalA]}], GeometricAssertion[{\[FormalCapitalA], \[FormalCapitalF]}], \{"对边",Line[{\[FormalCapitalD], \[FormalCapitalF]}], GeometricAssertion[三角形[{\[FormalCapitalD], \[FormalCapitalF]}], "等边"],Line[{\[FormalCapitalA], \[FormalCapitalF]}], "在DE上构造一个等边三角形。"]}]] |
你得到的第一个图像基本上是构造的结果。而且,就像所有其他几何场景一样,它现在是交互式的。但如果你把鼠标放在上面,你会得到允许你移动到前面步骤的控件:
![]()
& # 10005
|
在较早的步骤中移动一个点,您将看到这对后面的构造步骤有什么影响。
欧几里得几何是我们所知道的第一个数学公理系统。所以2000多年后,令人兴奋的是我们最终可以让它变得可计算.(是的,它最终会与AxiomaticTheory,FindEquationalProof等)。
但在认识的意义上欧几里得几何学的原始公式,我们添加了他的命题的可计算版本(以及一堆其他“著名的几何定理”)。上面的例子证明是欧几里得书1中的命题9.举个例子,我们可以看到他用希腊文写的原文
![]()
& # 10005
实体(“GeometricScene”、“EuclidBook1Proposition9”)(“GreekStatement”) |
下面是现代Wolfram语言——一种计算机和人类都beplay体育手机官网安卓版beplay体育官网下载app能理解的形式:
![]()
& # 10005
实体(“GeometricScene”、“EuclidBook1Proposition9”)(“场景”) |
欧几里得与笛卡尔相遇(2021年5月)
在过去的几年里,我们已经做了很多关于几何的事情,未来还会有更多。在版本12.0中,我们介绍了欧几里德式的合成几何.在版本12.3中,我们连接到“笛卡尔式”解析几何,将几何描述转换为代数公式。
给定三个符号指定的点,GeometricTest可给出它们共线的代数条件:
![]()
& # 10005
GeometricTest [{{a、b}, {c, d}, {e, f}},“共线”) |
对于共线性的特殊情况,有一个特定的函数来进行测试:
![]()
& # 10005
共线性点[{{a, b}, {c, d}, {e, f}}] |
但GeometricTest在作用域上更通用—支持30多种谓词。这给出了多边形为凸的条件:
![]()
& # 10005
GeometricTest[多边形[{{a、b},{1,2},{3},{4 7}}],“凸”) |
这给出了多边形是正则多边形的条件:
![]()
& # 10005
GeometricTest[多边形[{{a、b}, {c, d},{1},{2,3}}],“普通”) |
这是三个圆相互相切的条件(是的,∃有点“后笛卡尔”):
![]()
& # 10005
GeometricTest[{圆({0},r),圆({a、b}, s),圆[{c, d} t]},“切”) |
版本12.3还增强了核心计算几何。最值得注意的是RegionDilation而且RegionErosion,它们本质上是相互卷积的区域。RegionDilation通过将一个区域转换到另一个区域的每一点,有效地找到整个(“闵可夫斯基和”)“并区”。
为什么这个有用?事实证明有很多原因。一个例子是“钢琴搬运工问题(又名机器人运动规划问题)。假设有一个矩形形状,有没有办法让它(在最简单的情况下,不旋转)穿过有特定障碍物(如墙壁)的房子?
基本上,你需要做的就是利用矩形形状“扩大房间”(以及障碍):
![]()
& # 10005
RegionDilation [\ !\(\* GraphicsBox[TagBox[DynamicModuleBox] {Typeset 'mesh = HoldComplete[BoundaryMeshRegion[{{0.], 0。},{0.1149999999999999999 ', 0。}, {0.114999999999999999999 ', 0.2299999999999999998 '}, {0.;, 0。22999999999999998`}}, { Line[{{1, 2}, {2, 3}, {3, 4}, {4, 1}}]}, Method -> { "EliminateUnusedCoordinates" -> True, "DeleteDuplicateCoordinates" -> Automatic, "DeleteDuplicateCells" -> Automatic, "VertexAlias" -> Identity, "CheckOrientation" -> Automatic, "CoplanarityTolerance" -> Automatic, "CheckIntersections" -> Automatic, "BoundaryNesting" -> {{0, 0}}, "SeparateBoundaries" -> False, "TJunction" -> Automatic, "PropagateMarkers" -> True, "ZeroTest" -> Automatic, "Hash" -> 740210533488462839}]]}, TagBox[GraphicsComplexBox[{{0., 0.}, {0.11499999999999999`, 0.}, { 0.11499999999999999`, 0.22999999999999998`}, {0., 0.22999999999999998`}}, {Hue[0.6, 0.3, 0.95], EdgeForm[Hue[0.6, 0.3, 0.75]], TagBox[PolygonBox[{{1, 2, 3, 4}}], Annotation[#, "Geometry"]& ]}], MouseAppearanceTag["LinkHand"]], AllowKernelInitialization->False], "MeshGraphics", AutoDelete->True, Editable->False, Selectable->False], DefaultBaseStyle->{ "MeshGraphics", FrontEnd`GraphicsHighlightColor -> Hue[0.1, 1, 0.7]}, ImageSize->{27.866676879084963`, Automatic}]\), CloudGet["http://wolfr.am/VAs8Qsr5"]] |
然后,如果从一个点到另一个点有一条连接的路径,那么就有可能沿着这条路径移动钢琴。(当然,同样的事情也可以在工厂里对机器人做,等等。)
RegionDilation也可用于“平滑”或“偏移”形状,例如CAD应用程序:
![]()
& # 10005
三角地区[RegionDilation[[]、磁盘[]]] |
至少在简单的情况下,人们可以用它来“笛卡尔”,并得到明确的公式:
![]()
& # 10005
RegionDilation[磁盘三角形[],[]] |
而且,顺便说一下,这一切都适用于任何维度——提供了一种有用的方法来生成各种“新形状”(就像圆柱体是三维空间中由一条线膨胀的圆盘)。
几何区域:装配和建筑(2021年12月)
给定圆上的一堆点,它们在哪个圆上?
这里是一个圆周围随机选择的点:
![]()
& # 10005
|
新函数RegionFit能找出这些点在哪个圆上
![]()
& # 10005
|
这是一个3D点的集合:
![]()
& # 10005
|
这将使圆柱体与以下点相匹配:
![]()
& # 10005
|
Version 13.0中另一个非常有用的新函数是ConcaveHullMesh-它试图从3D点的集合中重建一个表面。以下是1000点:
![]()
& # 10005
|
凸包会把所有东西都包裹起来:
![]()
& # 10005
|
但凹形船体会使表面“进入凹形”:
![]()
& # 10005
|
在如何重建表面上有很大的自由度。版本13中的另一个函数是GradientFittedMesh,由推断的曲面法线集合形成曲面:
![]()
& # 10005
|
我们刚刚讨论了如何从“点数据”中找到几何区域。Version 13.0中的另一个新功能是构造立体几何(CSG),它显式地从几何原语构建区域。主要功能是CSGRegion,它允许在原语上执行各种操作。这是一个由原语交叉形成的区域:
![]()
& # 10005
|
请注意,这是一个“精确的”区域,不涉及数值近似。所以当我们要求它的体积时,我们得到了一个精确的结果:
![]()
& # 10005
|
我们可以建立更复杂的层次结构:
![]()
& # 10005
|
虽然积分很困难,但我们仍然可以得到像体积这样的精确结果:
![]()
& # 10005
|
给定一个层次结构的几何区域,可以将其“树形化”CSGRegionTree:
![]()
& # 10005
|
在机械工程中,通过物理上执行各种操作来制造零件是很常见的,这些操作可以很容易地以CSG形式表示。这是一个稍微复杂一点的CSG树
![]()
& # 10005
|
它可以“组装”成一个典型工程部件的实际CSG区域:
![]()
& # 10005
|
对CSG的思考突出了确定何时两个区域是“相同”的问题。例如,即使一个区域可能被表示为一般多边形,其实也可能是纯的矩形.不仅如此,这个区域可能在空间的不同位置,具有不同的方向。
在13.0版本中,函数RegionCongruent对此的测试:
![]()
& # 10005
|
RegionSimilar也允许区域改变大小:
![]()
& # 10005
|
但知道两个区域是相似的,下一个问题可能是:从一个到另一个需要什么样的转换?在版本13.0中,FindRegionTransform试图确定这一点:
![]()
& # 10005
|
注释的演算(2020年3月)
如何向正在计算的对象添加元数据注释?对于版本12.1,我们已经开始推出一个通用的框架来做注释,然后用它们来计算。
另一种可以像图一样进行注释的结构是网.这是说用一个样式注释维度为0的边界单元格:
![]()
& # 10005
注释[{MengerMesh[2], {0, "Boundary"}}, MeshCellStyle -> Red] |
这个Wolbeplay体育手机官网安卓版fram U计算探索课程研究一系列传统上与编码无关的学科。 |
评论