NAC Locator Entfernungsberechnung +- 1km

alles zu Conteste, Regional-Wettbewerbe .....
Antworten
Benutzeravatar
DB7MM
Beiträge: 233
Registriert: Sa 14. Apr 2012, 18:17
Wohnort: Kronach

NAC Locator Entfernungsberechnung +- 1km

Beitrag von DB7MM » Sa 18. Feb 2017, 15:49

Hallo zusammen,

die Auswertung vom 2m NAC Februar 2017 ist raus. Dabei fällt mir auf, daß die vom Auswerter berechneten Entfernungen häufig 1 km größer sind als die in der von cqGMA exportierten EDI-Datei:
http://www.vushf.dk/contest/ubn.php?con ... gn=DB7MM/P
Das ist bei allen von GMA-Teilnehmern beim NAC eingereichten Logs so. Sieht nach einem Rundungsproblem aus. cqGMA scheint immer abzurunden, NAC rundet immer auf.
Gibt es da bei den Contesten einen Standard, wie da zu verfahren ist? 1 km pro QSO, da kommt bei den big guns mit ein paar hundert QSOs ganz schön was zusammen.
Die berechneten Entfernungen von HamOffice und cqGMA stimmen übrigens überein, UCXLog rundet tendenziell auch mal auf.

73 (oder soll ich auf 74 aufrunden?) Michael, DB7MM

Benutzeravatar
dg7acf
Beiträge: 136
Registriert: Mo 16. Feb 2015, 11:30
Wohnort: JO42ui

Re: NAC Locator Entfernungsberechnung +- 1km

Beitrag von dg7acf » Sa 18. Feb 2017, 18:38

Die Formel steht in den Basic Contest Rules.
Kurz gesagt, wird ab 'Komma-Null' aufgerundet mit dem praktischen Effekt, dass man einen Punkt für ein QSO im eigenen Kleinfeld erhalten würde.

Außer dem Hinweis im Contestlog hat ein anderes Runden aber keine Auswirkungen. Der Logroboter berechnet die Punkte selbst und benutzt sein eigenes Ergebnis.

Ahoi
Pom
Mein Spielfeld ist die Welt.

Benutzeravatar
dl4mfm
Administrator
Beiträge: 1002
Registriert: So 29. Aug 2010, 11:31
Wohnort: Osnabrück
Kontaktdaten:

Re: NAC Locator Entfernungsberechnung +- 1km

Beitrag von dl4mfm » Di 21. Feb 2017, 16:55

Muss ich mal nachschauen, wenn ich etwas Luft habe. Diese 1km Differenz ist mir auch schon aufgefallen.

Dass die Routinen etwas älter sind, ist dabei ja nicht schlimm, an der Erde verändert sich ja nicht so viel ;) Ich dachte immer, dass ich die Turbo Pascal-Entfernungsroutinen von DL1MEN (sk) umgesetzt hätte - stimmt ja aber gar nicht :lol: es ist DL5FBD. Wenn einer Langeweile hat, kann er ja mal drüberschauen.
<?php
# ******************************************************************************
# *** QRB-Calculation DC7CCC ***
# *** ***
# *** email: dc7ccc@darc.de ***
# *** www : www.AdventureRadio.de ***
# *** ***
# *** Die Berechnung erfolgt(e) nach Folke Rosvall, SM5AGM. ***
# *** Das Programm war in BASIC geschrieben fuer den ***
# *** COMMODORE PET 2001-32 Personal Computer. ***
# *** ***
# *** 24-Mar-1991 Basic umgesetzt in Turbo Pascal ***
# *** 07-Nov-1993 QRBberechnung nach DL5FBD eingebaut (Turbo Pascal) ***
# *** 01-Oct-1995 umgesetzt in Object-Pascal fuer Borland DELPHI 1.0 ***
# *** 07-Apr-1998 umgesetzt in JAVA-Script ***
# *** 15-Mar-1999 umgesetzt in die JAVA Klasse QwjLocator ***
# *** 11-Sep-2002 umgesetzt in PHP4 ***
# *** 17-Aug-2010 verschiedene Rundungsmoeglichkeiten in function qrbQtf ***
# *** ***
# ******************************************************************************



#-------------------------------------------------------------------------------------
#
# Berechnung des Cosinus zu einem gegebenen Gradwinkel
#
#-------------------------------------------------------------------------------------

function gCos($winkel) {
return cos($winkel * pi() / 180.0);
}

#-------------------------------------------------------------------------------------
#
# Berechnung des Gradwinkels zum gegebenen Cosinuswer
#
#-------------------------------------------------------------------------------------

function arcgCos($cosinus) {
$arcBog = 0; // Hilfsvariable vor Gradumrechnung
$result = 0; // return-Wert

if ($cosinus >= 1.0) {
$result = 0.0;
} // Sonderfall 0 Grad
else
if ($cosinus <= -1.0) {
$result = 180.0;
} // Sonderfall 180 Grad
else {
// ARCBOG:=PI/2-ARCTAN(COSINUS/(SQRT(1-SQR(COSINUS))));
$arcBog = pi() / 2.0 - atan($cosinus / (sqrt(1 - ($cosinus * $cosinus))));
// Umrechnung vom Bogenmass in Grad
$result = $arcBog * 180.0 / pi();
};
return $result;
}


#-------------------------------------------------------------------------------------
#
# Berechnung des Sinus zu einem gegebenen Gradwinkel
#
#-------------------------------------------------------------------------------------

function gSin($winkel) {
$gsin=sin($winkel*pi()/180);
return $gsin;
}

#-------------------------------------------------------------------------------------
#
# Die Funktion "QrbQtf" berechnet die Entfernung (QRB) zwischen zwei geografischen
# Koordinaten und den Winkel (Antennenrichtung, QTF)
#
#-------------------------------------------------------------------------------------

function QrbQtf($o1, $n1, $o2, $n2) {

global $yqrb;
global $yqtf;
global $yqrbround;

$yqrb = 0;
$yqtf = 0;

if (($o1 == $o2) && ($n1 == $n2)) return;


$ew = 0; // Entfernungswinkel
$rv = 0; // vorlaeufige Richtung

// Entfernungsberechnung

$ew = arcgCos(gSin($n1) * gSin($n2) + gCos($n1) * gCos($n2) * gCos($o2 - $o1));
$yqrb = 40009.0 / 360.0 * $ew;

// Richtungsberechnung

$rv = arcgCos((gSin($n2) - gSin($n1) * gCos($ew)) / (gCos($n1) * gSin($ew)));

$oo = gSin($o2 * -1 - $o1 * -1);

if ($oo >= 0)
$yqtf = $rv;
else
$yqtf = 360.0 - $rv;

switch ($yqrbround):
case 1 : $yqrb = round($yqrb,1); break;
case 2 : $yqrb = round($yqrb,2); break;
default : $yqrb = round($yqrb);
endswitch;

$yqtf = round($yqtf);

return;
}

#-------------------------------------------------------------------------------------
#
# Die Funktion "toDeg" rechnet einen QTH-Locator in geografische Koordinaten um
#
#-------------------------------------------------------------------------------------

function toDeg($yqth, $yeast, $ynorth) {

global $yeast;
global $ynorth;

$ywi = array (0,0,0,0,0,0);
$ychr = array ('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9');

$yeast = 0.0;
$ynorth = 0.0;

$yqth=strtoupper($yqth);

# Ermittlung der Indexziffern aus dem QTH-Kenner

$yc = 0;
while ($yc < 6) {
$yco = substr($yqth,$yc,1);
$yy=0;
foreach ($ychr as $letter)
{
$yy++;
if ($letter==$yco) {
$ywi[$yc]=$yy;
if ($ywi[$yc]>26) $ywi[$yc] = $yy-26;
$ywi[$yc] = $ywi[$yc] -1 ;
}
}
$yc++;
}

# Berechnung der geografischen Koordinate aus den Indexziffern

$yeast = (-180 + ($ywi[0]*20) + ($ywi[2]*2) + ($ywi[4]/12.0) + (1/24.0)) * -1;
$ynorth= -90 + ($ywi[1]*10) + ($ywi[3]*1) + ($ywi[5]/24.0) + (1/48.0);

return;
}

#-------------------------------------------------------------------------------------
#
# Die Funktion "QRB" erhaelt zwei Maidenhead-Locator und initialisiert die globalen
# Variablen "$yqrb" und "$yqtf".
#
#-------------------------------------------------------------------------------------

function qrb ($locfrom, $locto, $errcode) {

global $yeast;
global $ynorth;
global $yqrb;
global $yqtf;

$errcode=0;

$yc="";
$yc=checkLoc($locfrom);
if ($yc>"") {
$yqrb=0;
$yqtf=0;
return $yc;
}

$yc="";
$yc=checkLoc($locto);
if ($yc>"") {
$yqrb=0;
$yqtf=0;
return $yc;
}

if ($locfrom == $locto) {
$yqrb=0;
$yqtf=0;
return $errcode;
}

toDeg($locfrom, $yeast, $ynorth);

$yeast1 = $yeast;
$ynorth1 = $ynorth;
toDeg($locto, $yeast, $ynorth);

QrbQtf($yeast1, $ynorth1, $yeast, $ynorth);

}

#-------------------------------------------------------------------------------------
#
# QTH-Locator auf Gueltigkeit pruefen
#
#-------------------------------------------------------------------------------------

function checkLoc($yploc) {

$ych1 = array ('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S');
$ych2 = array ('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X');
$ynum = array ('0','1','2','3','4','5','6','7','8','9');
$yrtn = "";

$yploc=strtoupper($yploc);
if (strlen($yploc)<>6) {
return "error: wrong locator length";
}

if (! in_array (substr($yploc,0,1), $ych1)) {return "error in locator (char 1 out of bounds)"; }
if (! in_array (substr($yploc,1,1), $ych1)) {return "error in locator (char 2 out of bounds)"; }
if (! in_array (substr($yploc,2,1), $ynum)) {return "error in locator (num 1 out of bounds)"; }
if (! in_array (substr($yploc,3,1), $ynum)) {return "error in locator (num 2 out of bounds)"; }
if (! in_array (substr($yploc,4,1), $ych2)) {return "error in locator (char 5 out of bounds)"; }
if (! in_array (substr($yploc,5,1), $ych2)) {return "error in locator (char 6 out of bounds)"; }

return $yrtn;
}



Benutzeravatar
DB7MM
Beiträge: 233
Registriert: Sa 14. Apr 2012, 18:17
Wohnort: Kronach

Re: NAC Locator Entfernungsberechnung +- 1km

Beitrag von DB7MM » Di 21. Feb 2017, 22:22

dl4mfm hat geschrieben:
Di 21. Feb 2017, 16:55
Muss ich mal nachschauen, wenn ich etwas Luft habe. Diese 1km Differenz ist mir auch schon aufgefallen.
Nur keinen Streß machen! Wie in Poms Link zu sehen ist, runden die NAC-Leute konsequent auf. Selbst das eigene Locator Kleinfeld bekommt damit 1 km, ab 1,01 km wird dann schon auf 2 km aufgerundet.
Es ist also nichts falsch an Deinem Code, es geht nur um die Frage, wie man die Entfernungen rundet. Immer ab, immer auf oder kaufmännisch.

Mich würde interessieren, wie das bei anderen Contesten gehandhabt wird.

Ach ja: Hier steht's im Code. Wenn ich das richtig sehe, ist ab PHP 5.3 PHP_ROUND_HALF_UP der Standardwert, also kaufmännisch runden. Keine Ahnung, was PHP 4 macht.
switch ($yqrbround):
case 1 : $yqrb = round($yqrb,1); break;
case 2 : $yqrb = round($yqrb,2); break;
default : $yqrb = round($yqrb);
endswitch;
73 de Michael, DB7MM

Benutzeravatar
dl4mfm
Administrator
Beiträge: 1002
Registriert: So 29. Aug 2010, 11:31
Wohnort: Osnabrück
Kontaktdaten:

Re: NAC Locator Entfernungsberechnung +- 1km

Beitrag von dl4mfm » Mi 7. Feb 2018, 15:06

.
Ich habe jetzt die Enfernungsberechnung ab sofort den IARU Region I Contestregeln angepasst.


Mir ist beim Durchsehen der UKW-Contestlogs aufgefallen, dass manchmal sogar eine Differenz von 2 Kilometern zur GMA Berechnung waren.

Das Original der GMA-Berechnung stammt ja von DL5FBD und er hatte einen Erdumfang von 40009 km angegeben, die in 360° aufgeteilt werden. Das ergibt einen Faktor von 111.136

Dazu habe ich im Internet gefunden:
How Far Is One Degree?

Converting NASA's measurement of the Earth's radius into meters and substituting it in the formula for arc length, we find that each degree the radius line of the Earth sweeps out corresponds to 111,139 meters. If the line sweeps out an angle of 360 degrees, it covers a distance of 40,010, 040 meters. This is a little less than the actual equatorial circumference of the planet, which is 40,030,200 meters. The discrepancy is due to the fact that the Earth bulges at the equator.

https://sciencing.com/convert-distances ... 58322.html
In den IARU Contestregeln steht, dass hier zur Entfernungsberechnung ein Faktor 111.2 benutzt wird,
Um Vergleichswerte vergleichbar zu machen, sollte für die Umrechnung von Grad in Kilometer bei der Berechnung der Abstände mit Hilfe der sphärischen Geometriegleichung ein Faktor von 111,2 verwendet werden.

https://www.iaru-r1.org/images/VHF/File ... s_2018.pdf
Der hieraus errechnete Wert wird immer abgerundet und 1 dazugezählt. Das ist das Ergebnis.

GMAC heute - vor der Umstellung:
gmac1.JPG
gmac1.JPG (36.04 KiB) 277 mal betrachtet
GMAC heute - nach der Umstellung:
gmac2.JPG
gmac2.JPG (38.08 KiB) 277 mal betrachtet



73 ...

Benutzeravatar
dl4mfm
Administrator
Beiträge: 1002
Registriert: So 29. Aug 2010, 11:31
Wohnort: Osnabrück
Kontaktdaten:

Re: NAC Locator Entfernungsberechnung +- 1km

Beitrag von dl4mfm » Mo 19. Feb 2018, 13:25

War irgendwie klar, dass die "neue" Entfernungsberechnung sich woanders negativ auswirkt.
Ich habe die Aktivierung auf den Homert (DM/NW-206) geplant und sehe dann, dass in der Liste der nächsten Gipfel der Homert wieder auftaucht. Klar - gleicher QTH-Locator, der jetzt aber mit 1km bewertet wird ;) und deshalb in der Liste auftaucht.
qrb.jpg
qrb.jpg (51.35 KiB) 174 mal betrachtet

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast