crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Python + таблица Брадиса
Гость_test_testovich_*
сообщение 27.8.2014, 8:12
Сообщение #1





Гости








    


Привет.
Дали задание - найти угол в прямоугольном треугольнике, если известны катет и гипотенуза. По формуле sin(a)=AC/AB
Раскрывающийся текст
(_http://www.fxyz.ru/%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D1%8B_%D0%BF%D0%BE_%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%B8/%D0%BF%D0%BB%D0%BE%D1%81%D0%BA%D0%B8%D0%B5_%D1%84%D0%B8%D0%B3%D1%83%D1%80%D1%8B/%D1%82%D1%80%D0%B5%D1%83%D0%B3%D0%BE%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA/%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D1%8F%D0%BC%D0%BE%D1%83%D0%B3%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D1%82%D1%80%D0%B5%D1%83%D0%B3%D0%BE%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA%D0%B0/ )


Получаем дробное значение и ищем его по таблице. Допустим, что гипотенуза 5, катеты 4 и 3. sin(A) = 3/5 = 0.6, а это примерно 60 градусов, хотя, может и ошибаюсь. Но вопрос не в этом. Вопрос в другом. Python'овские тригонометрические ф-ции требуют указания значения в радианах. Например, нам надо найти sin(90) градусов. Заведомо мы знаем, что ответом будет 1

A(рад) = 90 * (pi/180) = 1.57 - это равно pi/2, 0.999999682932 ~1
Цитата
print math.sin(90*(3.14/180))

Но это не те значения. Как мне получить значения угла именно из таблицы Брадиса, естественно, не вбивая эту таблицу в ассоциативный массив и т.п.

Благодарю за ответ.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ahalaj
  опции профиля:
сообщение 27.8.2014, 11:23
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 14.6.2014
Пользователь №: 4166

Спасибо сказали: 13 раз(а)




Репутация:   1  


Цитата(test_testovich @ 27.8.2014, 9:12) *
A(рад) = 90 * (pi/180) = 1.57 - это равно pi/2, 0.999999682932 ~1
Цитата
print math.sin(90*(3.14/180))

Но это не те значения. Как мне получить значения угла именно из таблицы Брадиса, естественно, не вбивая эту таблицу в ассоциативный массив и т.п.


#!/usr/bin/env python
import math

SINE_TABLE = [math.sin(math.radians(x)) for x in xrange(0, 90)]
COSINE_TABLE = [math.cos(math.radians(x)) for x in xrange(0, 90)]

def main():
    print("sine(5) = {0}".format(SINE_TABLE[5]))
    print("sine(15) = {0}".format(SINE_TABLE[15]))
    print("cosine(5) = {0}".format(COSINE_TABLE[5]))
    print("cosine(15) = {0}".format(COSINE_TABLE[15]))
if __name__ == '__main__':
    main()

[ahalaj@ahalaj foo]$ ./bradis.py
sine(5) = 0.0871557427477
sine(15) = 0.258819045103
cosine(5) = 0.996194698092
cosine(15) = 0.965925826289
[ahalaj@ahalaj foo]$


Принцип понятен? Таблицы синусов и косинусов строятся на лету, вбивать вручную это не надо. А после по индексу угла в градусах берёшь значение. Для углов больших 90 градусов выполняешь стандартное преобразование по четвертям из школьного курса тригонометрии. Вот и всё.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_test_testovich_*
сообщение 27.8.2014, 11:33
Сообщение #3





Гости








    


Несколько не то. Или вы вопрос не так поняли.
Попробую переделать задачу.

В прямоугольном треугольнике известны 3 стороны (+ разумеется угол 90 градусов). Найти угол А, если противолежащая сторона равна 3, а гипотенуза равна 5. Из описания синуса, как отношение противолежащей стороны к гипотенузе получаем 3/5 = 0.6

Вопрос sin(0.6) - это сколько градусов и как это вычислить программно, т.к. данные доступны только в таблице Брадиса. Создание словарей не предлагать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ahalaj
  опции профиля:
сообщение 27.8.2014, 16:14
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 14.6.2014
Пользователь №: 4166

Спасибо сказали: 13 раз(а)




Репутация:   1  


Цитата(test_testovich @ 27.8.2014, 12:33) *
Несколько не то. Или вы вопрос не так поняли.
Попробую переделать задачу.

В прямоугольном треугольнике известны 3 стороны (+ разумеется угол 90 градусов). Найти угол А, если противолежащая сторона равна 3, а гипотенуза равна 5. Из описания синуса, как отношение противолежащей стороны к гипотенузе получаем 3/5 = 0.6

Вопрос sin(0.6) - это сколько градусов и как это вычислить программно, т.к. данные доступны только в таблице Брадиса. Создание словарей не предлагать.

#!/usr/bin/env python
import math

def main():
    print("angle: {0}".format(math.degrees(math.asin(3.0/5.0))))
    print("angle: {0}".format(math.asin(3.0/5.0) * 180 / math.pi))

if __name__ == '__main__':
    main()
[ahalaj@ahalaj foo]$ ./foo.py
angle: 36.8698976458
angle: 36.8698976458
[ahalaj@ahalaj foo]$


Как видим результат всегда одинаков (в градусах) как при использовании питоновской функции degrees из модуля math, так и при ручном переводе радианов в градусы. Или я опять не так понял? Или уважаемый test_testovich не знает про сущестование функции арксинус, арккосинус и подобных, обратных синусу, косинусу, etc.? :lol:

И да, это без таблиц, значение просто передаётся в функцию math.asin()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 9:38