![]() |
|
|
#1
|
||||
|
||||
|
Всем привет товарищи! Возникла проблема с написанием кода. Есть картинка http://www.delphisources.ru/forum/at...d=135169922 9.Вообщем что мне нужно. Если программа проводит линию от 0 до 50 то она по пикселям высчитывает правильно, но если проводит линию от 0 до 10 то показывает 18. Как можно исправить эту проблему.
P.S. Константа расчитана(50/на количестово пикселей от 0 до 50) с плавающей точкой. |
|
#2
|
||||
|
||||
|
взять константу как целое и как единичный отрезок, т.е., например, в одном делении 20 пикселей, соответсвенно десятое деление будет через 200 пикселей, пятидесятое - 1000 пикселей и.т.д.
|
|
#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'ы сравниваются быстрее. Если ответил совсем не в тему - сформулируй, пожалуйста, яснее свой вопрос. Последний раз редактировалось Bargest, 31.10.2012 в 23:35. |
|
#5
|
||||
|
||||
|
2.jpg По данному рисунку постараюсь более точно сформулировать свой вопрос. Если провести линию от 0 до 50 1-ая верт. линия (расчитывается по одной константе) её длина составляет 50, но если по этой же константе провести линию от 0 до 10 (2-ая линия), то её длина получается 18 (По ходу здесь вылазиет погрешность из-за того что отрезки разноудаленные от начальной точки). Мне нужно чтобы в отрезке от 0 до 10 2-ая линия равнялась 10.
|
|
#6
|
||||
|
||||
|
Дайте код-то свой, а то получается постановка диагноза по фотографии...
|
|
#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 лишняя, и напоследок дабавлю куском этого кода находил длину отрезков.
|