Действительно ли весь заключительный класс неизменен?

От 2-D пространства будет 2 допустимых прямоугольника, которые могут быть созданы. Не зная исходную матричную проекцию, Вы не будете знать, какой корректен. Это совпадает с проблемой "поля": Вы видите два квадрата, одна внутренняя часть другой, с 4 внутренними вершинами, подключенными к 4 соответствующим внешним вершинам. Вы смотрите на поле от нисходящего или восходящего?

Однако Вы ищете матричное преобразование T где...

{{x1, y1, z1}, {x2, y2, z2}, {x3, y3, z3}, {x4, y4, z4}} x T = {{x1, y1}, {x2, y2}, {x3, y3}, {x4, y4}}

(4 x 3) x T = (4 x 2)

, Таким образом, T должен быть (3 x 2) матрица. Таким образом, у нас есть 6 неизвестных.

Теперь создают систему из ограничений на T и решают с Симплексом. Для создания ограничений Вы знаете, что строка, проходящая через первые две точки, должна быть параллельна передаче строки вторым двум точкам. Вы знаете, что строка, проходящая через точки 1 и 3, должна быть параллельна строкам, проходящим через точки 2 и 4. Вы знаете, что строка, проходящая 1 и 2, должна быть ортогональной к строке, проходящей через точки 2 и 3. Вы знаете, что длина строки от 1 и 2 должна равняться длине строки от 3 и 4. Вы знаете, что длина строки от 1 и 3 должна равняться длине строки от 2 и 4.

Для создания этого еще легче Вы знаете о прямоугольнике, таким образом, Вы знаете длину всех сторон.

, Который должен дать Вам много ограничений для решения этой проблемы.

, Конечно, для возвращения можно найти T-инверсию.

@Rob: Да, существует бесконечное число проекций, но не бесконечное число проектов, где точки должны удовлетворить требования прямоугольника.

@nlucaroni: Да, это только разрешимо, если у Вас есть четыре точки в проекции. Если прямоугольные проекты ко всего 2 точкам (т.е. плоскость прямоугольника является ортогональным на поверхность проекции), то это не может быть решено.

Hmmm... Я должен пойти домой и записать этот небольшой драгоценный камень. Это походит на забаву.

Обновления:

  1. существует бесконечное число проекций, если Вы не фиксируете одну из точек. Если Вы фиксируете на точек исходного прямоугольника, то существует два возможных исходных прямоугольника.
14
задан Gourav 27 October 2009 в 11:55
поделиться

5 ответов

Нет - последний класс означает, что вы не можете наследовать от него. Это не имеет ничего общего с изменчивостью. Следующий класс является окончательным, но изменяемым:

public final class FinalMutable {
  int value;
  public void setValue(int v) { value=v; }
  public int getValue() { return value; }
}
22
ответ дан 1 December 2019 в 05:51
поделиться

Нет, final означает, что класс не может быть расширен. Это ничего не говорит об изменчивости. Например:

final class MutInt {
   public int modifyMe;
}
30
ответ дан 1 December 2019 в 05:51
поделиться

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

РЕДАКТИРОВАТЬ:
Это означает, что нет ключевого слова, делающего класс неизменяемым. Чтобы сделать класс неизменяемым, вы должны защитить внутренние компоненты, сделав их окончательными или закрытыми.

Непонятная вещь заключается в следующем: ключевое слово final имеет другое значение при использовании в классе, чем при использовании в поле / переменной. Первое означает «этот класс не может быть расширен». Второй означает, что «эту переменную (или ссылку) изменить нельзя».

9
ответ дан 1 December 2019 в 05:51
поделиться

As has been said by the others before final does not make a class imuutable in Java though it plays a part in the immutability strategy. To obtain immutability you should follow the general guidlines:

  • ensure the class cannot be overridden - make the class final, or use static factories and keep constructors private
  • make fields private and final
  • force callers to construct an object completely in a single step, instead of using a no-argument constructor combined with subsequent calls to setXXX methods (that is, avoid the Java Beans convention)
  • do not provide any methods which can change the state of the object in any way - not just setXXX methods, but any method which can change state
  • if the class has any mutable object fields, then they must be defensively copied when passed between the class and its caller
5
ответ дан 1 December 2019 в 05:51
поделиться

В дополнение к другим ответам, если вы посмотрите на код для java.lang.String , вы увидите, что он содержит поле: hash , который является изменяемым и фактически вычисляется и сохраняется при первом вызове hashCode () .

Однако класс по-прежнему неизменяемый : Поле хэша не может быть доступно напрямую или изменено за пределами класса.

Кроме того, вы можете заметить, что общий подход в JDK - это реализация неизменяемых оболочек, которые могут использоваться для раскрытия внутренних объектов объекта. состояние, не позволяя его изменять; например,

private final List<String> values;

public List<? get String> getValues() {
  return Collections.unmodifiableList(values);
}
5
ответ дан 1 December 2019 в 05:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: