Niualj
Anmeldungsdatum: 31. Juli 2014
Beiträge: 116
|
Ich versuche gerade ein Programm mit Shellscripts zu Programmieren um mir automatisch bei Dreiecken die Winkel berechnen zu lassen. Nun habe ich das Problem das ich keine möglichkeit finden kann, das mir das Terminal Sinus oder Kosinus u.s.w. berechnet. Es reicht vollkommen aus wenn sie mir einfach nur eine möglichkeit sagen würden um von einer beliebigen zahl Sinus zu berechnen. Vielen Dank!
|
Ulf24
Anmeldungsdatum: 30. September 2014
Beiträge: 114
Wohnort: Thüringen
|
Hallo, ich kenne die mathematischen Funktion in der Bash nicht so genau. Ich würde dafür ein Perl-Skript verwenden. Als Beispiel kannst Du Dir eine Datei namens sinus.pl erstellen mit folgendem Inhalt:
| #!/usr/bin/perl -w
use strict;
use warnings;
my $winkel = 30; # Winkel definieren
my $radiant = $winkel / 180 * 3.14159; # Winkel in Radiant umrechenen
my $sinus_winkel = sin($radiant); # Sinus ermitteln
# Ausgabe auf dem Bildschirm
print "\nDer Sinus von $winkel Grad ist $sinus_winkel.\n\n";
|
Starten kannst Du die Datei mit perl -w sinus.pl oder Du markierst diese Datei als ausführbar. Grüße Ulf.
|
Niualj
(Themenstarter)
Anmeldungsdatum: 31. Juli 2014
Beiträge: 116
|
Kann ich dieses script dann auch in en shellscript einbauen und dann über einen befehl wie $winkel= 40⁰ die Gradzahl ändern?
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12802
|
Ulf24 schrieb:
ich kenne die mathematischen Funktion in der Bash nicht so genau. Ich würde dafür ein Perl-Skript verwenden.
Ich nicht. Alles, bloß kein Perl. 😛 Dann lieber awk . $ awk -v winkel=30 'BEGIN { printf("%10.3f\n", sin(winkel * 3.14 / 180))}'
0.500 Ciao robert
|
Ulf24
Anmeldungsdatum: 30. September 2014
Beiträge: 114
Wohnort: Thüringen
|
Ja, das geht, wir müssen nur die Standardeingabe und -ausgabe nutzen. Gib mir 20 Minuten.
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13896
|
Niualj schrieb: ... shellscript einbauen ...
Für Radiant kannst Du z. B. bc -l in einem shell-Script benutzen:
:~$ echo $sin=$(echo "scale=10; s(1.5)" | bc -l)
=.9974949866 EDIT: Umrechnung Radiant in Grad: https://de.wikipedia.org/wiki/Radiant_(Einheit)
|
Niualj
(Themenstarter)
Anmeldungsdatum: 31. Juli 2014
Beiträge: 116
|
rklm schrieb: Ulf24 schrieb:
ich kenne die mathematischen Funktion in der Bash nicht so genau. Ich würde dafür ein Perl-Skript verwenden.
Ich nicht. Alles, bloß kein Perl. 😛 Dann lieber awk .
Einverstanden!☺
$ awk -v winkel=30 'BEGIN { printf("%10.3f\n", sin(winkel * 3.14 / 180))}'
0.500
Das hatt super geklappt! Jetzt kann ich das direkt verwenden.
Zuerst hatt es zwar nicht funktioniert aber ich habe es dann in etwas geändert:
winkel=90
echo $(awk -v winkel=$winkel 'BEGIN { printf("%10.3f\n", sin(winkel * 3.14 / 180))}')
|
Niualj
(Themenstarter)
Anmeldungsdatum: 31. Juli 2014
Beiträge: 116
|
lubux schrieb:
Für Radiant kannst Du z. B. bc -l in einem shell-Script benutzen:
:~$ echo $sin=$(echo "scale=10; s(1.5)" | bc -l)
=.9974949866 EDIT: Umrechnung Radiant in Grad: https://de.wikipedia.org/wiki/Radiant_(Einheit)
Da war mir das von rklm doch lieber da ich das, wenns auch nicht schwer ist, trotzdem nicht mehr umrechnen muss. Das ausrechnen von Cosinus und Tangens bekomme ich jetzt auch hin.
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13896
|
Niualj schrieb: ..., trotzdem nicht mehr umrechnen muss.
Das musst Du mit bc -l auch nicht. Z. B.:
:~$ winkel=30; echo $sin=$(echo "scale=10; s(($winkel * 3.14)/180)" | bc -l)
=.4997701026
|
Ulf24
Anmeldungsdatum: 30. September 2014
Beiträge: 114
Wohnort: Thüringen
|
Schün, wenn das Problem gelöst ist. Trotzdem meine Lösung zur Info. Das Perl-Skript:
| !/usr/bin/perl -w
use strict;
use warnings;
my $winkel = $ARGV[0]; # Winkel definieren
my $radiant = $winkel / 180 * 3.14159; # Winkel in Radiant umrechenen
my $sinus_winkel = int(sin($radiant)*10000+0.5) / 10000; # Sinus ermitteln und auf 5 Stellen nach dem Komma runden
# Ausgabe in die Standardausgabe
print $sinus_winkel;
|
Aus einem Shell-Skript kann man es so aufrufen:
| winkel=60
sinus=$(sinus.pl $winkel)
echo $sinus
|
Warum bloß kein Perl? Ich bin bei kleineren Sachen mit Perl sehr gut und schnell zurecht gekommen. Bitte nur kurze Infos, gehört ja nicht zum Thema.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
Niualj schrieb: Es reicht vollkommen aus wenn sie mir einfach nur eine möglichkeit sagen würden um von einer beliebigen zahl Sinus zu berechnen.
Wie genau muss der Sinus/Cosinus denn sein, bzw. reichen 91 Schritte für die Winkel von 0-90° oder brauchst Du 910 Schritte, 9100, ...?
|
Mooi
Anmeldungsdatum: 15. August 2014
Beiträge: 187
|
Niualj schrieb: Das hatt super geklappt! Jetzt kann ich das direkt verwenden.
winkel=90
echo $(awk -v winkel=$winkel 'BEGIN { printf("%10.3f\n", sin(winkel * 3.14 / 180))}')
Einfacher verwendbar ist es in einer Funktion, egal ob Perl, awk oder bc:
Sin() { awk -v winkel=$1 'BEGIN { printf("%.3f\n", sin(winkel * 3.14 / 180))}'; } Nach dieser Definition reicht zur Verwendung:
Sin 30
|