При работе с наборами растровых данных, содержащих данные об уклоне местности, иногда необходимо преобразовать градусы в радианы или радианы в градусы.
В одной руке, чтобы преобразовать радианы в градусы, угол необходимо умножить на коэффициент преобразования
180 / π
, что эквивалентно 57,2958.
Это потому, что
1 радиан = 180 / π градусов
В другой руке, при преобразовании градусов в радианы, угол необходимо умножить на коэффициент преобразования
π / 180
, что приблизительно равно 0,01745.
Это потому, что
1 ° = π / 180 радиан
Однако, несмотря на наличие Ниже приведены правильные коэффициенты преобразования в переменных. Я продолжаю получать сообщение о том, что преобразование НЕПРАВИЛЬНО в моем коде PYTHON.
Переменная с указанием коэффициента преобразования для преобразования градусов в радианы:
deg2rad = pi / 1 80
Переменная с указанием коэффициента пересчета в радианы в градусы
rad2deg = 180 / pi
Насколько я Я обеспокоен тем, что я сравниваю правильные методы преобразования градусов в радианы и радианы в градусы, используя Python:
Преобразование синуса 1 в радианах в градусы, используя следующий код с коэффициентом преобразования:
sine_r2d = round (sin (1 * (rad2deg)), 2)
Должен привести к тому же выводу, что и код ниже:
sine_d = round (sin (math.radians (1)), 2)
Аналогично преобразование синуса 1 в градусах в радианы с использованием следующего кода:
sine_d2r = round (sin (math.radians (1 * (deg2rad))), 2)
Должен обеспечивать тот же вывод, что и код ниже:
sine_r = round (sin (1), 2)
К сожалению, это не то, что происходит. Странно, но вместо умножения я получаю вывод «Коэффициент преобразования ПРАВИЛЬНО» в моем коде, когда делю углы (в градусах или радианах) на соответствующие коэффициенты преобразования.
Например, если я использую :
sine_r2d = round (sin (1 / (rad2deg)), 2)
Я получаю такой же вывод, как:
sine_d = round (sin (math.radians (1)), 2)
Или, если я использую:
sine_d2r = round (sin (math.radians ( 1 / (deg2rad))), 2)
Я получаю тот же вывод, что и при использовании:
sine_r = round (sin (1), 2)
Это совершенно неожиданно для меня, и я просто не могу понять, что я делаю неправильно.
Решение этого поможет мне продвинуться вперед в увеличенном коде Python ( этот код: arcpy: значение RUSLE S - для значения NULL в растре не устанавливается значение NULL ).
# -*- coding: utf-8 -*-
"""
Created on Fri Apr 17 20:15:00 2020
@author:
Filipe S C Pinhati
PhD candidate
University of Queenland
School of Civil Engineering
Aquatic studies group
With the help of Mark Meyer
Mark Meyer sad: "math.sin() expects radians, not degrees."
This is code is related to the question in
Geographic Information Systems website
"https://gis.stackexchange.com/questions/357950/arcpy-usle-s-value-set-null-in-raster-is-not-setting-values-to-null"
Description:
A series of IF/ELIF statements to compare manual conversion trigonometric methods
against the standard PYTHON methods
Background:
To convert radians to degrees the angle need to be multiplied by a conversion factor of
"180/π", or approximately 57.2958.
This is because 1 radian is equal to 180/π degrees
To convert degrees to radians the angle need to be divided by a conversion factor of
"180/π", or approximately 57.2958.
This is because 1 degree is equal to π/180 radian
"""
import math
from math import sin
#define the angle
a = 45
# defining the value of pi
pi = round((math.pi),8)
# conversion factor (cf)
cf = round(180/pi,6)
# output in degrees using no conversion factor
sine_d = round(sin(math.radians(a)),5) #correct
# output in radians using no conversion factor
sine_r = round(sin(a),5) #correct
# converts sine in degrees to radians using the conversion factor
sine_d2r = round(sin(math.degrees(a/cf)),5) #correct
# converts sine in radians to degrees using the conversion factor
sine_r2d = round(sin(a/cf),5) #unexpected conversion produces a correct result
# testing conversion factors
print "pi is ",pi
print "The conversion factor (cf) is ,", cf
print "You are converting the angle (",a,")"
print "The sin of ",a,"in radians is ",sine_r
print "The sin of ",a,"in degrees is ",sine_d
print " "
if sine_r2d == sine_d:
print "*--The conversion factor sine_r2d is CORRECT --*"
print ""
print " Converting sin(",a,") in radians to degrees by multiplying it by 'cf'' is ", sine_r2d,
print ",which is the same as using 'sin(math.radians(",a,")' = (", sine_d, ")"
print ""
elif sine_r2d != sine_d:
print "*--The conversion factor sine_r2d is INCORRECT--*"
print ""
print " Converting sin(",a,") in radians to degrees by multiplying it by 'cf'' is ", sine_r2d,
print ", and it should be the same as using 'sin(math.radians(",a,")' = (", sine_d, ")"
print ""
if sine_d2r == sine_r:
print "*--The conversion factor sine_d2r is CORRECT--*"
print ""
print " Converting sin(",a,") in degrees to radians by dividing it by 'cf'' is ", sine_d2r,
print ",which is the same as using 'sin(",a,")' = (", sine_r, ")"
print ""
elif sine_d2r != sine_r:
print "*--The conversion factor sine_d2r is INCORRECT--*"
print ""
print " Converting sin(",a,") in degrees to radians by dividing it by 'cf'' is ", sine_d2r,
print ", and it should be the same as using 'sin(",a,")' = (",sine_r, ")"
print ""