Тема: ленейка
Показать сообщение отдельно
  #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.
Ответить с цитированием