2017-03-14 4 views
-2

Ich versuche, nur zum Spaß, eine Code-Liste in einer Sprache namens Seed7 in Python geschrieben zu konvertieren. Ich habe es nur in der Beta-Phase, abgesehen von einem Teil. Dies ist der Extrakt der Seed7 Eintrag:Korrekte Verwendung von cos() und sin() in Python

x1 := flt(column) + 0.5; 
y1 := flt(row) + 0.5; 
angle := (course - 1.0) * 0.785398; 
delta_x := cos(angle); 
delta_y := -sin(angle); 
inquad := TRUE; 
blocked := FALSE; 
number := 1; 
while number <= distance do 
    y1 := y1 + delta_y; 
    x1 := x1 + delta_x; 
    row := trunc(y1); 
    column := trunc(x1); 
    if column < 1 or column > 8 or row < 1 or row > 8 then 
    inquad := FALSE; 
    number := distance; 
    else 
    if sect[row][column] <> 1 then (* Object blocking move *) 
     blocked := TRUE; 
     number := distance; 
    end if; 
    end if; 
    incr(number); 
end while; 

, die alle Sinn macht, mit Ausnahme der Tatsache, dass ich nicht verstehe, wie die Funktionen cos() und sin() arbeiten in Seed7.

Das Handbuch sagt:

sin

const func float: sin (in float: x)

Compute the sine of x, where x is given in radians. 

Returns: 
    the trigonometric sine of an angle. 

aber ich kann nicht das Äquivalent in Python machen.

Dieses Problem ist nur eines, das von mir verursacht wird, weil ich Python nicht richtig verstanden habe (und nicht wirklich toll mit Mathe), also komme ich hierher, um jemanden zu fragen, der diese Dinge versteht.

Welcher Code ist erforderlich, damit der obige Code in Python funktioniert? Hilfe!!! :-)

Vielen Dank,

Joseph.

Edit: Ich denke, das Problem ist die incr() -Funktion. Grundsätzlich ist es möglich, in diesem Spiel weniger als 1. Von den Hilfedateien verziehen:

writeln("Warp - One warp moves you the width of a quadrant. A warp of .5 will move you"); 
    writeln("halfway through a quadrant. Moving diagonally across a quadrant to the next"); 
    writeln("will require 1.414 warps. Warp 3 will move you 3 quadrants providing nothing"); 
    writeln("in your present quadrant blocks your exit. Once you leave the quadrant that"); 
    writeln("you were in, you will enter hyperspace; coming out of hyperspace will place you"); 
    writeln("randomly in the new quadrant. Klingons in a given quadrant will fire at you"); 
    writeln("whenever you leave, enter, or move within the quadrant. Entering a course or"); 
    writeln("warp of zero can be used to return to the command mode.") 

Mein Code sieht wie folgt aus:

x1 = float(column) + 0.5 
    y1 = float(row) + 0.5 
    angle = (course - 1.0) * 0.785398 
    deltaX = math.cos(angle) 
    deltaY = -math.sin(angle) 

    inQuad = True 
    blocked = False 
    num = 1 
    while num <= distance: 
     y1 += deltaY 
     x1 += deltaX 
     row = int(round(y1)) 
     column = int(round(x1)) 
     if column < 0 or column > 7 or row < 0 or row > 7: 
      inQuad = False 
      num = distance 
     else: 
      if sect[row][column] != 1: 
       blocked = True 
       num = distance 

     num += 1 

Die Sache ist ich verwende num + = 1 bei das Ende dort, im Gegensatz zu Incr, aber ich verstehe nicht incr. Wie gesagt, ich war lange nicht mehr im Spiel und bestimmte Dinge fangen mich wirklich aus.

Jede Hilfe in einem Licht würde geschätzt werden.

Joseph.

+2

Bitte kürzen Post nach unten nur Ihre Frage zu stellen, eine ganze Geschichte nicht nötig, da es nur fluffig und für niemanden nützlich ist. Was ist das Problem, das du hast? Funktionieren 'math.cos' und' math.sin' nicht? Hast du [this] (https://docs.python.org/3/library/math.html) gelesen? – Li357

+0

Andrew - Beitrag verkürzt. Der einzige Grund, warum ich es so gemacht habe, war, dass ich oft nicht genug Informationen in den Fragen hinzugefügt habe, die ich zuvor gestellt habe, und ich wollte nicht, dass Leute mich für ein N00b sperren, wenn - nun - ich bin ...;) Als Antwort auf deine Frage habe ich einfach die Funktionen eingefügt und die Hölle ist los. Die Verbindung, die Sie mir theoretisch gegeben haben, sagt, dass es einfach funktionieren sollte, aber es ist nicht. Ich gehe zurück und überprüfe meinen Code erneut. Danke vielmals. –

Antwort

0

Eine Vermutung:

Wenn Seed7 Radiant erwartet Sie Grad in Bogenmaß konvertieren müssen, bevor sin oder cos Anwendung:

import math 
math.sin(math.radians(1)) 
Verwandte Themen