Graphics2D - Математический сюжет - Плойгон - как получить все точки сюжета

Я только что попытался написать «строчный» код, чтобы визуализировать простую математику; Вот

Ploygon polygon=new Ploygon();
int x,y;


ploygon.addPoint(0,0);   
polygon.addPoint(width,height);

g.drawPolygon(polygon);

Код дает эффект y=x;

Хорошо... это довольно простой код; Но то, что мне интересно получить, это точки каждого N пикселей в течение периода оператора как {x0,y0}{0,0} и {x1,y1} {ширина, высота}, и это проблема :(

Массив polygon xpoints неудобен, так как он может содержать точно такие же точки, которые были добавлены при вызове метода addPoint(x,y); так что в моем случае есть только две добавленные точки, которые соединены многоугольником, но как насчет всех остальных точек, которые остаются между этими точками {x0,y0}{0,0} и {x1,y1} {width,height}? Как их получить?

Например. Возвращаясь к предыдущему фрагменту, как узнать, какое значение точки x, y, когда (height%N)=0 и т. д.?

Есть ли самый оптимальный способ?

Спасибо


person user592704    schedule 25.12.2011    source источник
comment
См. также Добавление точки в Polygon.   -  person trashgod    schedule 25.12.2011


Ответы (1)


Здесь вы должны понимать, что вы больше не работаете с пикселями/координатами как таковыми, а работаете с векторами. Вы получите почти такое же изображение из многоугольника, содержащего координаты (-500,-500) и (500,500), который нарисован на объекте Graphics, представляющем (обрезанную) область от (0,0) в левом нижнем углу до (100,100) в правом нижнем углу. (на данный момент игнорируя тот факт, что фактическая система координат Graphics имеет перевернутую ось Y).

Поэтому вам нужно решить это более обратным математическим способом, а не способом «читать пиксели». Если вы не хотите просто определить, находится ли заданная точка в форме (для чего интерфейс Shape предлагает встроенный метод), вам нужно рассчитать наклон линии и определить функции, которые представляют вашу линию. Например, продолжая пример, у вас есть две точки (-500, -500) и (500 500), что дает наклон 1000/1000 = 1. Таким образом, вы можете переписать эту функцию с точки зрения ваших координат x как f(x) = -500 + (x + 500). Затем, если вы хотите узнать, находится ли точка (100 200) на этой линии, все, что вам нужно сделать, это вычислить f(100) и убедиться, что это не так.

Возвращаясь к вашему примеру, найдя точки, соответствующие предикату (высота% N = 0), мы будем искать f(x) == 0 mod N, и поэтому «все», что вам нужно сделать, это решить уравнение для x.

person user268396    schedule 25.12.2011
comment
Возвращаясь к вашему примеру, найдя точки, соответствующие предикату (высота% N = 0), мы будем искать f (x) == 0 mod N, и поэтому «все», что вам нужно сделать, это решить уравнение для х. Все хорошо, но что, если f(x)!=N ? Я имею в виду, что это не целое число, поэтому нет способа получить правильную координату x, y? Что произойдет, если оператор сюжета будет выглядеть, например, как y=x*tan(a/b)+coeff? Есть ли способ обнаружить такие функциональные точки, чтобы сохранить их, скажем, в массиве? - person user592704; 25.12.2011
comment
Если я вас правильно понял, что будет решаться округлением вашего ответа до ближайшего целого числа? - person user268396; 25.12.2011
comment
Эмм... Вы имеете в виду Math.round()? ок попробую отпишусь о результатах - person user592704; 26.12.2011