types - 表示多边形链的最佳方式

标签 types geometry julia

我想要一个结构来表示 3D polygonal chain .我有一个结构 Point 表示 3D 中的一个点,因此我的结构基本上必须是一个点元组,因为链的段数不会增加。我需要该结构,因为我将定义和使用专用于多边形链的方法。

我通过以下方式将其定义为参数类型:

struct PolygonalChain{N}
    endpoints::NTuple{N,Point}
end

N 应该是一个整数。我不确定这是否是最好的方法。我知道参数类型中的参数应该是数据类型而不是类型的具体实例。我不确定我是否可以以更智能的方式使用元组而不定义任何结构

最佳答案

在这种情况下,最重要的两件事是 API 的性能和舒适度。

首先,我会将点的类型指定为参数类型,因为点的类型绝不仅限于三维。由于它是参数类型,因此不会影响性能。

其次,您需要一个舒适的构造函数,这样您就不需要在创建对象时显式创建元组。

最后,由于您将频繁访问 PolygonalChain 的元素,因此它的行为应该类似于 Vector,因此您无需每次都键入字段名称。

以下是如何在 Julia 中完成如此出色的 API:

abstract type AbstractPoint end
struct Point1d <: AbstractPoint 
   x::Float64
end

struct PolygonalChain{N,P <: AbstractPoint} <: AbstractVector{P}
    endpoints::NTuple{N,P}
end
PolygonalChain(x...) =  PolygonalChain((x...,))

Base.size(p::PolygonalChain{N, P}) where {N,P} = (N, )
Base.getindex(p::PolygonalChain, idx::Int) = p.endpoints[idx]

现在让我们测试一下。请注意我们如何使用构造函数(没有元组!),它如何显示以及如何访问点:

julia> p=PolygonalChain(Point1d(1.0),Point1d(3.0))
2-element PolygonalChain{2, Point1d}:
 Point1d(1.0)
 Point1d(3.0)

julia> p[1]
Point1d(1.0)

关于types - 表示多边形链的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66641189/

相关文章:

types - 抽象类型子类型的通用构造函数

java - java中判断对象的类型

javascript - 将 javascript 数组保存到 Postgres 多边形字段中

android - 以圆形显示图像

julia - 防止 juno-atom 重新克隆所有 julia 包

haskell - 在 Data.Array.Unboxed 中使用 newtype 和 ghc 7.10

java - 由于浮点精度误差导致的分割平方问题

julia - 使用 Plots 在 Julia 中绘制 DataFrames

multithreading - 使用 Julia 1.3.1 的多线程速度较慢

c# - 类型转换的性能