Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2017, 10:14   #1
Alexander Gamza
Пользователь
 
Регистрация: 14.06.2017
Сообщений: 31
По умолчанию Нужна подсказка (графика)

Здравствуйте!

Есть функция пересчета мировых координат точки в экранные

Код:
void fRetScrC(int *sx, int *sy, float rx, float ry, float xmax, float ymax, float xmin, float ymin, int w, int h)
{
    float k[2];
 
      k[0]=ymax-ymin;
      k[1]=xmax-xmin;
 
     if(k[1]/k[0]<1)  //saving draw proportion
      k[1]=k[0];
     else
      k[0]=k[1];
 
     *sx = (w/k[0])*(ry-ymin);
     *sy = h-(h/k[1])*(rx-xmin);
}
В цикле создается набор точек из списка координат объекта (земельный участок) и строится полигон на канве.
Проблема в том, что если параметры Height и Width канвы равны (соответственно w=h), то объект отображается с сохранением пропорций, если же нет, то пропорции нарушаются.
Если у кого есть какие-либо соображения по этому, ответьте.
Заранее спасибо.
Alexander Gamza вне форума Ответить с цитированием
Старый 14.12.2017, 10:25   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

w и k int
Разделив 3 на 2 получите 1 а не 1.5
waleri вне форума Ответить с цитированием
Старый 15.12.2017, 00:45   #3
Alexander Gamza
Пользователь
 
Регистрация: 14.06.2017
Сообщений: 31
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
w и k int
Разделив 3 на 2 получите 1 а не 1.5
Коэффициенты k имеют тип float
Alexander Gamza вне форума Ответить с цитированием
Старый 15.12.2017, 09:37   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Alexander Gamza Посмотреть сообщение
*sx = (w/k[0])*(ry-ymin);
*sy = h-(h/k[1])*(rx-xmin);
попробуйте привести w и h к типу float:

Код:
     *sx = (((float)w)/k[0])*(ry-ymin);
     *sy = (float)h-(((float)h)/k[1])*(rx-xmin);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.12.2017, 09:55   #5
Alexander Gamza
Пользователь
 
Регистрация: 14.06.2017
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
попробуйте привести w и h к типу float:

Код:
     *sx = (((float)w)/k[0])*(ry-ymin);
     *sy = (float)h-(((float)h)/k[1])*(rx-xmin);
Это я уже пробовал. Проблема не в типах, вычисления производятся нормально, только эти формулы рассчитывают экранные координаты, вписывая объект в размеры окна. А надо сохранить масштаб исходного объекта по осям. Чувствую, что надо расчитать доп. масштабные коэффициенты, но не могу сообразить, как.
Alexander Gamza вне форума Ответить с цитированием
Старый 15.12.2017, 17:44   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Проблема в том, что если параметры Height и Width канвы равны (соответственно w=h), то объект отображается с сохранением пропорций, если же нет, то пропорции нарушаются.
т.е. на квадрате(w=h) объект отображается нормально, а если канва "растянута" допустим по горизонтали (w=2h), то и объект оказывается растянутым в горизонтали (и в той же степени).
так у вас же используются РАЗНЫЕ коэффициенты растяжения по горизонтали и по вертикали.
Цитата:
Код:
      k[0]=ymax-ymin;
      k[1]=xmax-xmin;
используйте только один(только вот какой) и будет вам ОДИНАКОВО пропорционально увеличено, но займет не всю канву(если выбрать меньший коэффициент) или будет обрезано(больший коэффициент).
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна подсказка seric PHP 1 08.08.2016 21:27
Нужна подсказка romka kot Общие вопросы .NET 1 02.11.2012 08:06
нужна подсказка) brutalis БД в Delphi 0 15.10.2011 20:18
Нужна подсказка iilordii Помощь студентам 1 19.06.2011 21:23