2014-12-21 2 views
1

Моя фигура имеет форму «Σ». Проблема в том, что я должен масштабировать ее из левого верхнего угла вместо середины, где диагонали этого символа соединяются.Якорная точка gotoxy в C++

Я был бы очень признателен, если бы кто-нибудь хотел поделиться советами о том, как изменить его опорную точку для увеличения или уменьшения ее стороны. Я думаю об этом почти неделю и не могу понять, что менять. Функция

void figure(int &x1, int &x, int &y1, int &y, int &side, char &a, char &key) 
{ 
system("cls"); 

x1 = x; y1 = y; 
gotoxy(x1, y1); 
for (int i = 1; i <= side+ 10; i++) // upper figure edge 
{ 
    cout << a; 
} 
for (int i = 1; i <= side; i++) // diagonal edge 
{ 
    y1++; 
    x1 = x + (i <= side/2 ? i : (side - i + 1)) ; 
    gotoxy(x1, y1); 
    cout << a; 
    x1 = x; 
} 

y1++; 
gotoxy(x1, y1); 
for (int i = 1; i <= side + 10; i++) // bottom figure edge 
    cout << a; 
key = getch(); 
} 



void enlarge_reduce(char &key, const int &console_size_x, const int &console_size_y, int &side, int &x, int &y, int &x1, int &y1) //enlarging and reducing figure size 
{ 
switch (key) 
{ 
case '+':   // figure enlarge 

    if (side <= (console_size_y <= console_size_x ? console_size_y - 4 : console_size_x - 4)) 
    { 
     side += 2; 
     --x; 
     --y; 
    } 
    break; 

case '-':   // reduce figure 
    if (side > 4) 
    { 
     side -= 2; 
     ++x; ++y; 
    } 
    break; 
} 
} 
+0

Кажется, что вы хотите нарисовать масштабированный 2-мерный объект в декартовом пространстве координат. Возможно, вам будет полезно взглянуть на некоторые основы компьютерной графики: http://www.willamette.edu/~gorr/classes/GeneralGraphics/Transforms/transforms2d.htm –

+0

Ммм, чтобы быть более конкретным, это просто простая программа в окнах консоль, написанная в MS VS 2013. Хотя эта информация не является полезной для этого проекта, я сохраню этот сайт для дальнейшего продвижения с помощью C++, так как это, по-видимому, очень просто объясняет пару вещей, которые могут мне понадобиться. Спасибо за этот сайт, у вас пока нет идеи, как масштабировать фигуру из другой точки. На картинке ниже точка привязки находится посередине во время масштабирования, но я хочу быть в левом верхнем углу фигуры и не знаю, как это сделать. Http://oi57.tinypic.com/o7mw74.jpg – nehel

+0

Я знаю, что программа делает , Вы хотите нарисовать глиф на картезианской системе координат (консоли). Глиф рисуется в результате нескольких операций против этой системы. Чтобы масштабировать вокруг другой точки, вы должны перевести начало координат (векторное добавление), затем масштаб (векторное умножение), затем перевести назад (векторное добавление). –

ответ

0

Ваша фигура() использует верхний левый угол в качестве точки привязки, а не средний. Функция enlarge_reduce() перемещает верхний левый угол.

+0

Итак, практически фигура, даже когда она масштабируется из средней точки, она масштабируется правильно, как если бы она была установлена ​​для верхнего левого угла? Потому что я хочу сделать верхний левый символ неподвижным. – nehel

+0

Ничего, получилось! – nehel

Смежные вопросы