我希望能够在 MATLAB 中处理 3D 结构。我是 MATLAB 新手,在谷歌搜索后还没有看到这个问题的答案。
如果您想显式定义特定的球体,而不使用内置的球体函数,这将如何工作?例如,有没有一种方法可以在 xyz 坐标系中定义变量 r = (1,1,1),然后定义一个新变量/集 S = {all s: distance (r,s) <= radius )}。如果我能做到这一点,那就非常方便了,但我不确定 MATLAB 如何处理类似的事情,因为它会涉及无限的点集,因此 MATLAB 必须有一些定义的最大分辨率。这可能吗?如果能够以这种方式定义 3D 结构,那就太好了。谢谢您
最佳答案
如果通过
all s: distance (r,s) <= radius)
你的意思是
all s in R3: distance (r,s) <= radius)
那么答案是:
不,您无法定义该集合 by extension (即枚举其所有元素),因为该集合有 uncountably infinitely many elements .
但是您可以定义该集合S by intension 。这意味着您可以构建一个规则(函数),给定 R3 中的任何值x,该规则将告诉您是否 x 是否在 S 中。
也就是说,可以使用anonymous function来构建该规则。如下:
>> r = [1 1 1]; %// set center
>> radius = 2; %// set radius
>> inS = @(s) sqrt(sum((s-r).^2))<radius;
当且仅当其输入属于 S 时,函数 inS
返回 true
(1
),并且false
(0
) 否则。例如,
>> inS([0 0 0])
ans =
1
>> inS([3 4 5])
ans =
0
>> inS([pi sqrt(2) exp(-1)])
ans =
0
这可能是您可以“定义”该集合的最接近的结果。
如果您想一次测试多个值,您可以 vectorize the function 而不是使用循环。与 bsxfun
:
>> inS = @(s) sqrt(sum((bsxfun(@minus, s, r)).^2, 2))<radius;
>> points = [ 0 0 0
3 4 5
pi sqrt(2) exp(-1) ];
>> inS(points)
ans =
1
0
0
关于matlab - 你能在 MATLAB 中像集合一样定义变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30606163/