У меня есть некоторые проблемы, которые требуют от меня манипулирования полигонами с использованием таких операций, как перемещение, расширение, вращение и сдвиг.Данные, которые у меня есть, на самом деле о границах штатов и геометрии из data.gov о штате Делавэр.Функция delaware.m возвращает массив ячеек (1x3 ячейка) с полигональными матрицами, описывающими форму состояния Делавера, и именно с этой формой мне нужно выполнить операции.Я опубликую конкретные вопросы, чтобы вы могли понять, о чем меня спрашивают, но я все же прошу более общих указаний, чем конкретный ответ на каждый вопрос.
- Переведите состояние Делавера так, чтобы его центр находился приблизительно в начале координат.
- Расширьте переведенное состояние Делавера так, чтобы оно соответствовало квадрату длины стороны, центрированной вorigin.
- Поверните переведенное расширенное состояние Делавэра так, чтобы округ Нью-Касл находился внизу, а Суссекс - вверху.
- Расширяйте переведенное, расширенное, повернутое состояние Делавера без измененияего площадь, так что он примерно такой же ширины, как и высокий.
- Сдвиньте переведенный, расширенный, повернутый, расширенный штат Делавэр, самый северный конец которого находится по крайней мере в 2 единицах справа от самого южного конца.
Дело в том, что я знаю, как выполнять все эти операции в Matlab только с одним полигоном / матрицей.Я в основном борюсь с тем, как использовать это с массивом ячеек.
Например, скажем, у меня есть матрица S.
newS=S+[1;2]; %move S one unit to the right and two units up
R=[sqrt(2)/2 -sqrt(2)/2; sqrt(2)/2 sqrt(2)/2];
newS=R*S %rotate the polygon by 45 degrees
D = [alpha 0; 0 beta];
%alpha is the dilation scaling the x direction and beta in the y direction
%left multiply S by this dilation matrix to dilate along the cardinal axes
Sh=[1 y; 0 1] %y controls the amount of shearing
%left multiply by S to shear a shape along the x-axis relative to the y-axis
Так, например, когда я пытаюсь выполнить операцию для перемещения фигуры вверх / вниз / влево / вправо, как я описал вышедля массива я получаю сообщение об ошибке Undefined operator '+' for input arguments of type 'cell'.
Я также пытался:
DEBoundary1 = cellfun(@sum, DEBoundary, [75.562;-39.6]);
%this is how much I wanted to move the polygons
Но получил:
>> Lab_code
Error using cellfun
All of the input arguments must be of the same size and shape.
Previous inputs had size 1 in dimension 1. Input #3 has size 2
Полагаю, в целом, этоЕсть ли простой способ взять эти операции, которые я уже знаю, и применить их к массиву ячеек, состоящему из многоугольников?Или я должен пойти по другому пути?