Мой заказчик из Германии дал мне небольшую задачу — разработать функцию для ПЛК Carel, которая будет определять, работает ли тепловой насос в оптимальном режиме. Режим является оптимальным, когда температуры конденсации и испарения находятся в определенных зонах, указанных в качестве многоугольников, поэтому важной частью этой задачи было математическое определение, находится ли точка внутри многоугольника. Я нашел очень хороший алгоритм, описанный У. Рэндольфом Франклином. Его суть может быть выражена всего в 3 строках кода:
for (i = 0, j = nvert-1; i < nvert; j = i++) { if ( ((verty[i]>testy) != (verty[j]>testy)) && (testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) ) c = !c; }
Похоже на волшебство, не правда ли!
Я перевел этот алгоритм в язык ST, и он работал хорошо. Единственным недостатком было то, что этот алгоритм не всегда точен для случая, когда проверяемая точка находится точно на стороне многоугольника или в одной из его вершин, поэтому я добавил еще немного кода для этого случая.
Когда я работал над этим заданием, я рисовал чертежи на бумаге, и моей 4-летней дочери стало любопытно. Когда я объяснил ей задачу, она попросила меня сделать игру на компьютере, которая бы говорила человеческим голосом. И так как я хотел улучшить свои знания языка Java, я согласился.
Вы можете увидеть результат здесь. Можно использовать как введение в мир математики и программирования для вашего ребенка. Моей дочери очень понравилось.
PointInPolygonJAR.zip – загрузите и распакуйте этот архив в некоторую папку на вашем компьютере, и вы сможете запустить игру, выполнив start.bat (для Windows) или start.sh (для Linux).
Проект был разработан с использованием Java SE 8 и Java FX, поэтому вам потребуется соответствующий Java Runtime Engine. Возможно, он уже установлен, поскольку Java может использоваться для многих других программ. Если нет, вы можете установить JRE8 отсюда:
https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html (требуется регистрация)
Вы можете запустить эту программу под Windows, Linux и MacOS. Вы можете записать свой голос и заменить WAV файлы. Вы также можете заменить файлы MP3 и отредактировать входной параметр в файле start.bat, но в вашей операционной системе должны быть установлены соответствующие кодеки (в Ubuntu 18 по умолчанию их не было).
Вот ссылка на весь проект, включая исходный код.
Вы можете изменить определенные параметры, такие как цвет, размер и положение элементов. Такого рода изменения в графическом интерфейсе можно выполнить без перекомпиляции исходного кода, изменив файл Main.fxml внутри архива JAR.
Если вы хотите изменить исходный код более существенно, вам необходимо установить JDK 8, установить Maven, изменить каталог на корень проекта, в котором находится файл pom.xml, и перекомпилировать файл JAR с помощью следующей команды Maven:
mvn install
Java FX была удалена из JDK, начиная с версии 11, поэтому, если вы хотите использовать JDK 11 или более позднюю версию, вам нужно будет раскомментировать строки в pom.xml.
Я все еще новичок в Java, поэтому все предложения и комментарии приветствуются.