Comments 20
Вопрос по теме, но к сообществу. Увидел класс Point2D отсюда и вопрос, т.к. использую для этих целей имя «Vector»:
Как правильно именовать точки в пространстве — с помощью класса Point или с помощью Vector. По факту ведь реализация (методы и поля) у них одинаковая совершенно, так ведь?
Как правильно именовать точки в пространстве — с помощью класса Point или с помощью Vector. По факту ведь реализация (методы и поля) у них одинаковая совершенно, так ведь?
0
По факту ведь реализация (методы и поля) у них одинаковая совершенно, так ведь?
Вы рассуждаете опираясь на реализацию, а не на интерфейсы. Важно то, что вы работаете с точками, а не векторами. Поэтому быдут логично использовать объекты Point, а не Vector. Но это, на мой взгляд, больше идеалогический вопрос.
0
Семантику я сейчас опускаю, интересуют подводные камни и общепринятость использования объекта вектора как точки.
В любом случае всегда можно написать
В любом случае всегда можно написать
class Point2 extends Vector2 {}
. 0
Точка подразумевает, что она описывается вектором, опирающимся на начало выбранной системы координат (0; 0).
Идея вектора не подразумевает фиксированного начала. Вектор как «смещение», оператор, который можно применить к чему угодно.
Вообразите себе время:
Есть «моментальный» тип, измеряемый в минутах-месяцах от фиксированного начала календаря. «Момент» с «моментом» не складывается, хотя можно найти разность моментов (это будут данные интервального типа).
Есть «интервальный» тип, измеряемый так же минутах-месяцах, но не имеющий привязки к фиксированному началу. Можно сложить интервал с интервалом, найти их разницу — в результате будут интервалы. Если сложить интервал с моментом, на выходе будет момент. Очевидно, что интервал сам по себе датой быть не может.
Идея вектора не подразумевает фиксированного начала. Вектор как «смещение», оператор, который можно применить к чему угодно.
Вообразите себе время:
Есть «моментальный» тип, измеряемый в минутах-месяцах от фиксированного начала календаря. «Момент» с «моментом» не складывается, хотя можно найти разность моментов (это будут данные интервального типа).
Есть «интервальный» тип, измеряемый так же минутах-месяцах, но не имеющий привязки к фиксированному началу. Можно сложить интервал с интервалом, найти их разницу — в результате будут интервалы. Если сложить интервал с моментом, на выходе будет момент. Очевидно, что интервал сам по себе датой быть не может.
+3
Но если брать реализации — я не видел, что бы вектор описывался двумя точками — Unreal Engine 4 (включая
ThirdParty/Oculus/LibOVR
и ThirdParty/nvTextureTools/nvTextureTools-2.0.6
, может быть ещё что), Libgdx (com/badlogic/gdx/math/Vector3
) и предполагаю что прочие по умолчанию подразумевают начало [0,0,0]
. Из чего можно сделать вывод, что речь идёт опять же о семантических
отличиях вектора от точки, а не отличиях в реализации
. Вопрос был конкретно в верности использования реализации
вектора, как точек для координатной сетки мешей, мира, экторов и прочего.0
Так у вас и валюта в вещественном типе хранится, и даже масса тоже в вещественном. И хэндлеры в целочисленном, арифметически совместимом, например, со счётчиками.
Именно поэтому возникла «венгерская нотация» — предварять наименование переменной её бизнес-типом. Если верно пользоваться венгерской нотацией, то программисту становится яснее что масса+валюта=неудачная мысль, даже если компилятор ошибок не выдает.
Повторяю:
момент + момент = операция бессмысленна
момент — момент = интервал
момент ± интервал = новый момент
интервал ± интервал = интервал
И:
точка + точка = операция бессмысленна
точка — точка = расстояние
точка ± расстояние = новая точка
расстояние ± расстояние = новое расстояние
Я не знаю объектной модели Java, но на вашем месте я бы внимательно читал документы на предмет именно такой «семантической» (я называю «бизнес», потому, что мало ли где ещё эта семантика) разницы между точкой и вектором.
Именно поэтому возникла «венгерская нотация» — предварять наименование переменной её бизнес-типом. Если верно пользоваться венгерской нотацией, то программисту становится яснее что масса+валюта=неудачная мысль, даже если компилятор ошибок не выдает.
Повторяю:
момент + момент = операция бессмысленна
момент — момент = интервал
момент ± интервал = новый момент
интервал ± интервал = интервал
И:
точка + точка = операция бессмысленна
точка — точка = расстояние
точка ± расстояние = новая точка
расстояние ± расстояние = новое расстояние
Я не знаю объектной модели Java, но на вашем месте я бы внимательно читал документы на предмет именно такой «семантической» (я называю «бизнес», потому, что мало ли где ещё эта семантика) разницы между точкой и вектором.
+1
В геометрии нет определения точки, но можно схитрить, «определив» точку как конец вектора (x,y,z)
-1
Мдя…
0
Поясню на всякий случай. Можно говорить о взаимнооднозначном соответствии векторов и точек в пространстве, если задана некоторая начальная точка. Но в этом случае, каждой точке в пространстве можно поставить в соответствие набор из координат вектора, который соответствует этой точке. И эти числа будут однозначно определять точку, как определяют вектор.
0
Прошу прощение, но ведь уже есть класс java.awt.geom.Point2D, которые специально используются для всех подобных классов (например, точки в Line2D возвращаются в виде java.awt.geom.Point2D), зачем нужно вводить свои точки?
Тогда, если я не ошибаюсь, и необходимость в Branch отпала бы.
Тогда, если я не ошибаюсь, и необходимость в Branch отпала бы.
0
Класс Point2D, я взял из другого своего проекта. Дополнительно в нем были определен метод для вращения точки относительно оси координат. И ввиду того, что я еще не гуру в Java, стараюсь изобретать велосипеды, для получения дополнительной практики.
Отдельный класс Branch был заведен из соображений расширяемости. Например для каждой ветки можно сохранять цвет. В методе getShape можно отрисовывать не линию, а полигон.
Отдельный класс Branch был заведен из соображений расширяемости. Например для каждой ветки можно сохранять цвет. В методе getShape можно отрисовывать не линию, а полигон.
0
А зачем в Branch длинна?
+1
Она была введена, условно говоря «с запасом». На данный момент используется для раскраски ветвей и «листьев», в разые цвета. Обратите внимание в классе PaintPanel, закомментированный участок кода:
Всё, что длиннее 30 — темно-оранжевое, меньше — зелёный.
if(b.length>30)
g2d.setColor(Color.ORANGE.darker());
else
g2d.setColor(Color.GREEN);
Всё, что длиннее 30 — темно-оранжевое, меньше — зелёный.
0
Хм… а не пробовали свернуть так:
Только тогда желательно будет выделить под Color.ORANGE.darker() отдельную переменную, что бы он не считался каждый раз.
g2d.setColor(b.length>30 ? Color.ORANGE.darker() : Color.GREEN);
Только тогда желательно будет выделить под Color.ORANGE.darker() отдельную переменную, что бы он не считался каждый раз.
0
Sign up to leave a comment.
Фрактальный кустик от новичка для новичков