From eac02aecc9e1f88c0469947182954aeabf523e9c Mon Sep 17 00:00:00 2001 From: praktimarc <61456874+praktimarc@users.noreply.github.com> Date: Thu, 2 May 2024 23:42:23 +0200 Subject: [PATCH] Update DirectionUtils.java --- .../locatorUtils/DirectionUtils.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/src/main/java/kst4contest/locatorUtils/DirectionUtils.java b/src/main/java/kst4contest/locatorUtils/DirectionUtils.java index 93eab91..bdb1fc6 100644 --- a/src/main/java/kst4contest/locatorUtils/DirectionUtils.java +++ b/src/main/java/kst4contest/locatorUtils/DirectionUtils.java @@ -2,6 +2,66 @@ package kst4contest.locatorUtils; public class DirectionUtils { + /** + * Checks wheter a sked-sender writes to a sked-receiver and is in my direction due he beams to this receiver + * + * @param myLocator + * @param locatorOfSkedSender + * @param locatorOfSekdReceiver + * @param maxRangeKm + * @param hisAntennaBeamWidth + * @return + */ + public static boolean isInAngleAndRange(String myLocator, String locatorOfSkedSender, String locatorOfSekdReceiver, double maxRangeKm, double hisAntennaBeamWidth) { + + Location myLocation = new Location(myLocator); + Location skedSenderLocation = new Location(locatorOfSkedSender); + Location skedReceiverLocation = new Location(locatorOfSekdReceiver); + + double distanceFromMeToLocSender = new Location(myLocator).getDistanceKm(new Location(locatorOfSkedSender)); + + // Check if distance exceeds my setted maximum range + if (distanceFromMeToLocSender > maxRangeKm) { + System.out.println("too far, " + distanceFromMeToLocSender + " km"); + return false; + } + + //check bearing of sender to receiver + + double bearingOfSekdSenderToSkedReceiver = skedSenderLocation.getBearing(skedReceiverLocation); +// System.out.println("skedTX -> skedTX deg: " + bearingOfSekdSenderToSkedReceiver); + + double bearingOfSekdSenderToMe = skedSenderLocation.getBearing(myLocation); +// System.out.println("skedTX -> me deg: " + bearingOfSekdSenderToMe); + + /** + * simple mech works + */ +// if (bearingOfSekdSenderToMe >= bearingOfSekdSenderToSkedReceiver) { +// if (bearingOfSekdSenderToMe-bearingOfSekdSenderToSkedReceiver <= hisAntennaBeamWidth/2){ +// System.out.println(bearingOfSekdSenderToMe-bearingOfSekdSenderToSkedReceiver + " <= " + hisAntennaBeamWidth); +// return true; +// } +// } else if ((bearingOfSekdSenderToMe <= bearingOfSekdSenderToSkedReceiver)) { +// if (bearingOfSekdSenderToSkedReceiver-bearingOfSekdSenderToMe <= hisAntennaBeamWidth/2){ +// return true; +// } +// } else return false; + /** + * simple mech end + */ + + if (DirectionUtils.isAngleInRange(bearingOfSekdSenderToSkedReceiver, bearingOfSekdSenderToMe, hisAntennaBeamWidth)) { + //I may should get "/2" because of 50% of the 3dB opening angle if txer is directed to sender exactly +// System.out.println("------------> isinangleandrange!"); + return true; + } else { +// System.out.println("not in angle and reach"); + return false; + } + } + + /** * Tests, if the angle (from me to) other station is in the range of the * angle (qtf) in degrees where my antenna points to.