MATLAB自定义rotate函数报错:需传入app为首个参数,如何修复?
解决MATLAB自定义rotate函数的调用冲突与语法错误
问题根源
你遇到的报错是因为自定义函数名rotate和MATLAB内置的rotate函数(尤其是App Designer环境下的UI组件旋转方法)重名,导致MATLAB把你的调用识别为内置方法,要求传入app作为第一个参数。另外你的自定义函数本身还有两处语法错误。
解决步骤
1. 重命名自定义函数
把你的自定义rotate.m文件重命名为不会和内置函数冲突的名字,比如myRotate.m,彻底避免命名冲突。
2. 修正自定义函数的语法错误
原函数里有两处错误:
- 变量名拼写错误:
vertsl应为verts - 2D旋转矩阵维度错误:你写的是1x3矩阵,正确的2D旋转矩阵是2x2的形式
修正后的myRotate.m代码:
function o = myRotate(centre, verts, theta) % 2D旋转矩阵:顺时针旋转theta度(若要逆时针,交换-sind(theta)和sind(theta)的位置) R = [cosd(theta) -sind(theta); sind(theta) cosd(theta)]; c = centre - verts; c = c * R; o = centre + c; end
3. 修改调用代码
把所有调用rotate的地方替换成新的函数名myRotate:
% Do the rotation of the circles verts = myRotate(root, verts, theta); sc1_loc = myRotate(root, [root(1) + h, root(2)], theta); sc2_loc = myRotate(root, [root(1) - h, root(2)], theta); bc1_loc = myRotate(root, [root(1), root(2) + k], theta); bc2_loc = myRotate(root, [root(1), root(2) - k], theta); sc1_loc_straight = myRotate(root, [root(1) + h, root(2)], 0); sc2_loc_straight = myRotate(root, [root(1) - h, root(2)], 0); bc1_loc_straight = myRotate(root, [root(1), root(2) + k], 0); bc2_loc_straight = myRotate(root, [root(1), root(2) - k], 0);
额外说明
如果你的verts是多行的点集(比如Nx2矩阵),上述代码可以直接处理每个点的旋转;如果是单个点(1x2向量)也能正常运行。
内容的提问来源于stack exchange,提问作者user14650291
相关产品推荐
相关产品推荐

