Чтобы узнать, как реализовать , ответ типа '1002 *', пожалуйста, посмотрите на мой первый ответ.Здесь я попытаюсь объяснить, почему ваша реализация не работает с математической точки зрения
Сначала убедитесь, что
math.pi-radian на самом деле является вашим предполагаемым поведением в (этоэквивалентно определению всего вашего угла как отрицательного)
def get_position_from_radian(radian, radius):
rotated_pos = [0.0, 0.0, 0.0]
rotated_pos[X] = math.cos(math.pi-radian) * radius
rotated_pos[Y] = math.sin(math.pi-radian) * radius
return(rotated_pos)
Также вы действительно должны удалить это.
if radian_a > math.pi:
slope_a *= -1
if radian_b > math.pi:
slope_b *= -1
Правильный способ получить наклон - m = tan(angle) = sin(angle)/cos(angle)
.
Для простоты давайте поставим b=0
, теперь давайте представим, что у вас есть один угол как pi / 4.Вы получите m = sqrt(2)/2 > 0
, что хорошо, поскольку 0 < angle < pi or pi < angle < 3/2 * pi
определит линию в 1-м и 3-м разделе вашего графика.
Теперь давайте возьмем угол pi + pi/4
.Это даст вам ту же самую линию, что и раньше, а касательная все равно даст вам m = sqrt(2)/2 > 0
, так как и cos и sin отрицательны в 3-м разделе.Если вы поменяете знак, потому что angle>pi
вы на самом деле получите неправильный результат.
Теперь вы решаете эту систему уравнений:
y = m1 * x + b1
y = m2 * x + b2
, что приводит к x_itercept = (b2-b1) / (m1-m2)
.
До сих пор ваша формула кажется правильной (кроме отсутствующих + в реализации) intercept[X] = ((intercept_y_a*-1) + intercept_y_b) / (slope_a (slope_b*-1))
.
Проблема начинается, когда вы пытаетесь переключить ось и использовать точно такую же формулу для пересечения у.
Для этого давайте инвертируем уравнение строки y(x) --> x(y)
(что мы можем сделать, поскольку это монотонная функция с одним отличным значением y для каждого x.
x = (y - b1) / m1
x = (y - b2) / m2
Давайте изменим некоторые имена, чтобы привести это в наиболее распространенную форму x = slope * y + b
m' = 1/m
b' = -b/m
x = m1' * y + b1'
x = m2' * y + b2'
Теперь мы можем решить эту систему точно так же, как первую, и получим
y_intercept = (b2' - b1') / (m1' - m2')
Структура формулы такая же, как и у используемой вами, но, как вы можете видеть, переменные в ней разные !!!!!!!
Вы получаете правильные значения b1 'и b2'как вы рассчитываете пересечение линии с осью х, ноВы по-прежнему используете m1 и m2 в качестве наклона вместо 1 / m1 и 1 / m2