关于 ndgrid 如何用正整数参数 生成 浮点数网格坐标数组, 然后用 hypot 计算矢量长度度, 出错 ?
이전 댓글 표시
ndgrid 生成网格坐标数组, 然后用 hypot 计算矢量尺度, 出错 !
在函数内部,指定了参数类型(因为要用于被C++调用),此时ndgrid生成的是坐标数组X Y竟然也是uint16数组(为什么与索引m n类型相关??),但hypot要求输入是浮点数数组,于是出错 !
intdou(3,3)
function intdou(m,n)
arguments
m uint16
n uint16
end
[Y,X] = ndgrid(1:m,1:n); % 若m nu时uint,X Y也是 uint!???
rad = hypot(X-n,Y-m); % hypot 要求参数必须时double ,出错 !
whos m n X Y rad
end
下面代码是正确可执行的,但此函数是为被C++调用设计必须指明参数类型uint。
function intdou(m,n)
arguments
m double %uint16
n double %uint16
end
[Y,X] = ndgrid(1:m,1:n);
rad = hypot(X-n,Y-m);
whos m n X Y rad
end
好奇葩! 似乎是 ndgrid设计为 输入和输出是同类型。
似乎我必须得这样设计一次转换, 才能保证 X Y是double矩阵:
function intdou(m,n)
arguments
m uint16
n uint16
end
[Y,X] = ndgrid(1:0.5:double(m),1:0.5:double(n)); % ndgrid 不能用dpuble做参数, 出错 !
rad = hypot(X-double(n),Y-double(m)); % % hypot 要求参数必须时double
whos m n X Y rad
end
채택된 답변
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Introduction to Installation and Licensing에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!