|
#1
|
||||
|
||||
ленейка
Всем привет товарищи! Возникла проблема с написанием кода. Есть картинка http://www.delphisources.ru/forum/at...d=135169922 9.Вообщем что мне нужно. Если программа проводит линию от 0 до 50 то она по пикселям высчитывает правильно, но если проводит линию от 0 до 10 то показывает 18. Как можно исправить эту проблему.
P.S. Константа расчитана(50/на количестово пикселей от 0 до 50) с плавающей точкой. |
#2
|
||||
|
||||
взять константу как целое и как единичный отрезок, т.е., например, в одном делении 20 пикселей, соответсвенно десятое деление будет через 200 пикселей, пятидесятое - 1000 пикселей и.т.д.
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard |
#3
|
||||
|
||||
Ленейка
Я так и расчитываю константу. А вычесляет почемуто с погрешностью.Можно ли как нибудь сгладить еще 2-ой константой чтобы она выравнивала значения до номинальной (1 точка),а когда доходит до (2-ой точки) уже подганяется 1-ой константой?
|
#4
|
||||
|
||||
Честно говоря, по описанию проблемы не понял ничего, кроме того, что пытаешься нарисовать линейку. Попытаюсь ответить исходя из того, что понял (то есть названия).
Код:
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; Можно ускорить код, если делать цикл for ... to по делениям, а не по координате. Integer'ы сравниваются быстрее. Если ответил совсем не в тему - сформулируй, пожалуйста, яснее свой вопрос. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 31.10.2012 в 23:35. |
#5
|
||||
|
||||
ленейка
2.jpg По данному рисунку постараюсь более точно сформулировать свой вопрос. Если провести линию от 0 до 50 1-ая верт. линия (расчитывается по одной константе) её длина составляет 50, но если по этой же константе провести линию от 0 до 10 (2-ая линия), то её длина получается 18 (По ходу здесь вылазиет погрешность из-за того что отрезки разноудаленные от начальной точки). Мне нужно чтобы в отрезке от 0 до 10 2-ая линия равнялась 10.
|
#6
|
||||
|
||||
Дайте код-то свой, а то получается постановка диагноза по фотографии...
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#7
|
||||
|
||||
Цитата:
Код:
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
|
||||
|
||||
Цитата:
Кстати abs здесь лишняя. |
#9
|
|||
|
|||
Ну а теперь приведи, чему равны
x1,y1,bx,by и rrsa в случае 1-я линия и 2-я линия |
#10
|
||||
|
||||
Спасибо за ответы тема закрыта.Пришлось на разных расстояниях ставить дополнительные константы. А по поводу кода согласен abs лишняя, и напоследок дабавлю куском этого кода находил длину отрезков.
|