MATLAB: цветной логотип из четырех частей (многоугольник) - PullRequest
2 голосов
/ 26 февраля 2012

Моя задача - написать код MATLAB для создания логотипа из 4 частей, как показано на скриншоте. Верхний левый должен быть черным, а нижний правый - белым. Другой два цвета должны быть выбраны программой случайным образом. enter image description here

Я выбрал следующий подход:

clear all
clc
close all

x = [1 4 1 4 1 6.5 7 7];
y = [3 4 5.5 5 8 7 8 3];
fill(x,y,'k')

, который создает верхнюю левую черную часть. Интересно, если этот подход достаточно хорош, и если это так, каков следующий шаг. Я думал о том, чтобы сохранить эти две переменные в объекте формы или в чем-то другом (я не знаком с Matlab) и как-то повернуть его. Не могли бы вы помочь мне с этим?

Ответы [ 2 ]

5 голосов
/ 26 февраля 2012

Вам не нужно вращаться, просто используйте симметрию

clear all
clc
close all

x = [1 4 1 4 1 6.5 7 7];
y = [3 4 5.5 5 8 7 8 3]-3;
clrs=jet(10);
fill(x,y,'k')
hold on;
fill(2*max(x)-x,y,clrs(round(rand*10),:))
fill(x,-y,clrs(round(rand*10),:))
fill(2*max(x)-x,-y,'w')
4 голосов
/ 26 февраля 2012

Самый простой способ сделать все это - убедиться, что ваша центральная точка (то есть точка, где встречаются разные цвета) расположена в [0,0]. Затем вращение фигуры (кратное 90 °) сводится к изменению знака значений x и / или y вашего контура.

Если вам нужно, чтобы фигура находилась в точке, отличной от [0 0], просто добавьте эти координаты после вращения.

Итак, начиная с вашего кода, вы можете сделать это:

x = [1 4 1 4 1 6.5 7 7]-7;
y = [3 4 5.5 5 8 7 8 3]-3;
c = [5 6];
col = [0 0 0;
       rand(2,3);
       1 1 1];
fill( x+c(1), y+c(2),col(1,:)); hold on;
fill(-x+c(1), y+c(2),col(2,:));
fill( x+c(1),-y+c(2),col(3,:));
fill(-x+c(1),-y+c(2),col(4,:)); hold off;

edit: Уточнение для переменных col и c.

Переменная col содержит цвета, которые будут использоваться в стиле rgb, где каждая строка является цветом. rand генерирует равномерно случайные числа в диапазоне [0,1], где также ожидаются значения цветов. В приведенном выше коде генерируется 2x3 случайная матрица, что означает 2 случайных цвета, которые идеально вписываются в матрицу col.

Переменная c содержит центр вашей фигуры. Если вы посмотрите на график, центр будет в [5 6] (то есть 5 вдоль оси x и 6 вдоль оси y). Вместо этого вы могли бы использовать две переменные, но я думаю, что проще хранить обе вместе в переменной. Лично я бы сделал то же самое для ваших переменных x и y, поскольку это позволило бы вам проще использовать матрицы вращения , но это просто вопрос выбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...