Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 18, 2019 23:25:13

nodochy
Зарегистрирован: 2019-11-15
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Графика. Поворот координатных осей.

У меня есть функция рисующая эллипс. Я хочу научить его смещаться на угол beta. Но он схлопывается в линию.

 from graph import *
import math
windowSize(500, 500)
# Function which draws ellipse(a,b - large and small semi diagonals x,y are starter coordinates)
def draw_ellipse(a, b, x, y):
    # constants and calcs
    penColor(0, 0, 0)
    penSize(3)
    moveTo(x, y)
    beta = math.radians(90)
    alpha = 0
    c = (a ** 2 - b ** 2) ** 0.5
    e = c / a
    if not 1 > e >= 0:
        print("error")
    r = b / (1 - e ** 2 * ((1 + math.cos(math.radians(2 * alpha))) / 2)) ** 0.5
    '''circle which draws ellipse'''
    while alpha <= 360:
        x1 = r * math.cos(math.radians(alpha))
        y1 = r * math.sin(math.radians(alpha))
        x1 = x1 * math.cos(beta) - y1 * math.sin(beta)
        y1 = x1 * math.sin(beta) + y1 * math.cos(beta)
        lineTo((x + x1), (y - y1))
        moveTo(x, y)
        alpha = alpha + 0.1
        r = b / (1 - e ** 2 * ((1 + math.cos(math.radians(2 * alpha))) / 2)) ** 0.5
draw_ellipse(50, 20, 250, 250)
print(randColor)
х1, y1 это координаты смещения.

Офлайн

#2 Ноя. 19, 2019 08:54:02

nodochy
Зарегистрирован: 2019-11-15
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Графика. Поворот координатных осей.

Сам решил. Но методом тыка, а хотелось бы понять почему. Формулы изначально правильные. Я упрощу немного задачу, что бы кода не писать суть та же.

 import math
def corner(x,y):
    beta = math.radians(90)
    x = x * math.cos(beta) - y * math.sin(beta)
    y = x * math.sin(beta) + y * math.cos(beta)
    print(x1,y1,beta)
corner(5,0)
Если я записываю так, то хочу, что бы точка A(5,0) стала A1(0,5) но он мне выдает (0 0) если бета 180 (-5 0) это правильно. Однако если я запишу код вот так
 import math
def corner(x,y):
    beta = math.radians(90)
    x1= x * math.cos(beta) - y * math.sin(beta)
    y1 = x * math.sin(beta) + y * math.cos(beta)
    print(x1,y1,beta)
corner(5,0)
То все работает для любых углов. По сути я сделал все тоже самое. Однако в первом случае по оси y координата не изменяется. У меня остался единственный вопрос почему

Офлайн

#3 Ноя. 19, 2019 19:03:14

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Графика. Поворот координатных осей.

nodochy
У меня остался единственный вопрос почему
Это не одно и тоже
 x = x * math.cos(beta) - y * math.sin(beta)
# в следующей строчке уже используется новый x
y = x * math.sin(beta) + y * math.cos(beta)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version