2014-01-05 4 views
0

Я сделал свой собственный плоттер с функцией java, который работает достаточно хорошо. Все, что вам нужно сделать, это выполнить итерацию с помощью (пикселей) панели и рассчитать значение y. Затем нарисуйте его полилинией на экране, и все.Масштабный коэффициент функции плоттер

Но вот моя проблема: существует коэффициент масштабирования между количеством пикселей и значением, которое я хочу построить. Например, я нахожусь на итерации 304 (итерируя по значению панели сюжета). Теперь я вычисляю соответствующее значение для этой позиции пикселя (304) по правилу три. Это дает мне 1.45436. Затем я вычисляю грех на основе этого значения. Это трансцендентное число. Затем я снова использую правило дерева, чтобы определить, для какого y-пикселя это значение соответствует. Для этого мне нужно округлить, потому что пиксель является целым числом. И есть потеря данных. Эта потеря данных может дать мне следующий результат:

enter image description here

Это выглядит не очень хорошо. Если я играю с изменением размера окна, иногда получаю ровный результат.

Как исправить эту проблему? На самом деле я никогда не видел таких графиков в любом другом плоттере.

+0

В вашем коде определенно что-то не так. Возможно, вы делаете часть математики с целыми числами, которые должны быть плавающей точкой. Если вы не отправляете код, вы никогда не получите ответ. – Gene

+0

Вы слишком задумываетесь об этом? На самом деле вы не работаете на пикселях. Когда я увеличиваю свой сюжет, я вижу, что красная линия сглажена, что имеет смысл, потому что вы не нарисовали пиксели, а полилинию. Но это сглаживание приводит меня к предположению, что координаты точек могут быть числами с плавающей запятой. Что произойдет, если вы не закончите? –

+0

Округление было ошибкой. Передача плавающих значений в полилинию отлично работает. – Sam

ответ

1

Если вы сделаете это на Java, вы можете подумать о составлении своих точек данных на Path2D. Это будет иметь координаты с плавающей запятой, и механизм рисования позаботится о сглаживании. Возможно, вам придется disablestroke control.

+0

Спасибо. Я уже использовал Path2D, но я не считал, что могу передавать значения с плавающей запятой в свои методы. Это хорошо работает. – Sam

Смежные вопросы