Форум по 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
Ответить с цитированием
  #7  
Старый 01.11.2012, 09:43
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

Цитата:
Дайте код-то свой, а то получается постановка диагноза по фотографии...
Код:
rast:=3.87;//константа
......
xrsa:=x1-bx;
yrsa:=y1-by;
karta.Canvas.MoveTo(x1,y1);
karta.Canvas.LineTo(bx,by);
rrsa:=(round(sqrt(abs(sqr(xrsa)+ sqr(yrsa)))*rast));
pos.Caption:=format('Длина~=%d',[rrsa]);
Ответить с цитированием
  #8  
Старый 01.11.2012, 13:59
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Klyaksa
Код:
rast:=3.87;//константа
......
xrsa:=x1-bx;
yrsa:=y1-by;
karta.Canvas.MoveTo(x1,y1);
karta.Canvas.LineTo(bx,by);
rrsa:=(round(sqrt(abs(sqr(xrsa)+ sqr(yrsa)))*rast));
pos.Caption:=format('Длина~=%d',[rrsa]);
Честно не понял, как этот код относится к указанной проблеме.
Кстати abs здесь лишняя.
Ответить с цитированием
  #9  
Старый 01.11.2012, 14:16
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Ну а теперь приведи, чему равны
x1,y1,bx,by и rrsa
в случае 1-я линия и 2-я линия
Ответить с цитированием
  #10  
Старый 03.11.2012, 12:51
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

Спасибо за ответы тема закрыта.Пришлось на разных расстояниях ставить дополнительные константы. А по поводу кода согласен abs лишняя, и напоследок дабавлю куском этого кода находил длину отрезков.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter