Вышеуказанный код является способом слишком сложным.
Помните, что круговая волна является вращательно-симметричной, то есть нет необходимости повторяться по углу; только амплитуда зависит от расстояния от источника (и, конечно, частоты / фазы; предполагается, что вы моделируете зависимость от времени, изменяя последнее).
Просто переберите все ячейки сетки и рассчитайте их расстояние до источника:
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
// calculate Euclidean distance to source
double dx = i - x, dy = j - y;
double dist = Math.sqrt(dx * dx + dy * dy);
// no need to check bounds explicitly here
wave[i][j] = Math.sin(f * dist + phase);
}
}
Примечание:
Было бы более целесообразно переименуйте "частоту" в волновой вектор (однако это не изменит код).
В отличие от линейных волн, круговые волны затухают с расстоянием из-за сохранения энергии.
[Редактирование: Это действительно не помогает, поскольку каждый web.xml должен был бы иметь того же слушателя]
Вы могли сделать, чтобы ServletContextAttributeListener прекратил слушать для вставок стандартного атрибута WebApplicationContext и затем уведомил некоторый централизованный монитор?
Не протестированный:
public class SpringWACListener implements ServletContextAttributeListener {
public void attributeAdded(ServletContextAttributeEvent scab) {
if (WebApplicationContext.
ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE.
equals(scab.getName()) {
myCentralisedMonitor.notify("added");
}
}
// same for others
}
Вы могли попробовать Комплект управления приложениями Spring
http://www.springsource.com/products/ams
не уверенный, что - включенные затраты то, хотя, не может вообразить это являющийся дешевым.
Раньше был, и это назвали [getServlets] (http://java.sun.com/products/servlet/2.2/javadoc/javax/servlet/ServletContext.html#getServlet (java.lang. Строка)); однако, это теперь удерживается от использования без замены, означающей, что наличие такого метода, вероятно, сделало реализацию спецификации чрезмерно обременительной. От JavaDoc спецификации:
getServlets
общественность java.util. Перечисление getServlets ()
Устаревший. С сервлета API 2.0 Java, без замены.
Этот метод был первоначально определен для возврата Перечисления всех сервлетов, известных этому контексту сервлета. В этой версии этот метод всегда возвращает пустое перечисление и остается только сохранять совместимость на уровне двоичных кодов. Этот метод будет постоянно удален в будущей версии Сервлета Java API.
Ваш контейнер может реализовать похожий метод, но это будет нестандартно, и необходимо будет вырыть в, он - документация, или скажите нам, какой контейнер Вы используете.
Нет - к обоим вопросам.
Доступ ко всем контекстам сервлета был бы проблемой безопасности. Вы смогли бы осмотреть и/или управлять другими веб-приложениями. Единственный, зная все контексты сервлета является самим контейнером. Но это - внутренняя реализация, нет никакого API.
Доступ контекста Spring подобен, но если Вы будете иметь в виду всю пружину контексты в одном веб-приложении, то они создадут иерархию - контексты для контроллеров, например. Реализация org.springframework.context.ApplicationListener
как боб в корневом пружинном контексте (как инициализировано org.springframework.web.context.ContextLoaderListener
настроенный в web.xml
) может уведомить, что Вы о запущенных контекстах, остановились, закрылись или обновились.