Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.10.2012, 21:19
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию ленейка

Всем привет товарищи! Возникла проблема с написанием кода. Есть картинка http://www.delphisources.ru/forum/at...d=135169922 9.Вообщем что мне нужно. Если программа проводит линию от 0 до 50 то она по пикселям высчитывает правильно, но если проводит линию от 0 до 10 то показывает 18. Как можно исправить эту проблему.
P.S. Константа расчитана(50/на количестово пикселей от 0 до 50) с плавающей точкой.
Изображения
Тип файла: jpg 1.jpg (2.4 Кбайт, 38 просмотров)
Ответить с цитированием
  #2  
Старый 31.10.2012, 21:42
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

взять константу как целое и как единичный отрезок, т.е., например, в одном делении 20 пикселей, соответсвенно десятое деление будет через 200 пикселей, пятидесятое - 1000 пикселей и.т.д.
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
  #3  
Старый 31.10.2012, 23:12
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию Ленейка

Я так и расчитываю константу. А вычесляет почемуто с погрешностью.Можно ли как нибудь сгладить еще 2-ой константой чтобы она выравнивала значения до номинальной (1 точка),а когда доходит до (2-ой точки) уже подганяется 1-ой константой?
Ответить с цитированием
  #4  
Старый 31.10.2012, 23:22
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Честно говоря, по описанию проблемы не понял ничего, кроме того, что пытаешься нарисовать линейку. Попытаюсь ответить исходя из того, что понял (то есть названия).
Код:
const step = 3.1415926535;      // шаг линейки в пикселях
const len   = 100500;          // длина линейки в шагах
const rlen  = len * step;       // длина линейки в пикселях
...
var x: real;
     ix: integer;
...
x := 0;
while x < rlen do
begin
  ix := Round(x);
  Canvas.MoveTo(ix, 0);
  Canvas.LineTo(ix, 10);
  x := x + step;
end;
Таким образом нарисуем деления без накапливающихся погрешностей. Если надо делать более длинные отметки через каждые N делений - то добавится еще один if и еще одна константа.
Можно ускорить код, если делать цикл for ... to по делениям, а не по координате. Integer'ы сравниваются быстрее.

Если ответил совсем не в тему - сформулируй, пожалуйста, яснее свой вопрос.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 31.10.2012 в 23:35.
Ответить с цитированием
  #5  
Старый 01.11.2012, 02:50
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию ленейка

2.jpg По данному рисунку постараюсь более точно сформулировать свой вопрос. Если провести линию от 0 до 50 1-ая верт. линия (расчитывается по одной константе) её длина составляет 50, но если по этой же константе провести линию от 0 до 10 (2-ая линия), то её длина получается 18 (По ходу здесь вылазиет погрешность из-за того что отрезки разноудаленные от начальной точки). Мне нужно чтобы в отрезке от 0 до 10 2-ая линия равнялась 10.
Ответить с цитированием
  #6  
Старый 01.11.2012, 02:56
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Дайте код-то свой, а то получается постановка диагноза по фотографии...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:37.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter