Найти - Пользователи
Полная версия: Графика. Поворот координатных осей.
Начало » Python для новичков » Графика. Поворот координатных осей.
1
nodochy
У меня есть функция рисующая эллипс. Я хочу научить его смещаться на угол 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 это координаты смещения.
nodochy
Сам решил. Но методом тыка, а хотелось бы понять почему. Формулы изначально правильные. Я упрощу немного задачу, что бы кода не писать суть та же.
 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 координата не изменяется. У меня остался единственный вопрос почему
doza_and
nodochy
У меня остался единственный вопрос почему
Это не одно и тоже
 x = x * math.cos(beta) - y * math.sin(beta)
# в следующей строчке уже используется новый x
y = x * math.sin(beta) + y * math.cos(beta)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB