Как рассчитать координаты по наклону?
У меня есть координаты точки игрока (50, 100)
Идет отклонение на 10 градусов оп часовой стрелке

мне нужно посчитать координаты x и y конечной точки луча
при этом угол наклона, координаты игрока могут менятся и надо придумать как это сделать
Я програмирую на pygame

полная версия: https://drive.google.com/file/d/1DFqnKnUzWxpLXdziHSZemKaGL7aHTIFp/view?usp=share_link минимальная версия: Main.py:
import pygame
import render
def run():
pygame.init()
screen = pygame.display.set_mode(500, 500)
pygame.display.set_caption('3d game')
while True:
def run():
pygame.init()
screen = pygame.display.set_mode((screen_size['width'],screen_size['height']))
pygame.display.set_caption('3d game')
while True:
pygame.draw.rect(screen, (255, 255, 255), pygame.Rect(0, 0, 500, 500))
render.render_position(screen)
pygame.display.flip()
run()
render.py:
import camera
import pygame
renderCamera = camera.Camera(100, 350)
def render_position(screen):
pygame.draw.circle(screen, (0, 0, 255), (250, 250), 30)
#for angle in range(0, 350, 10):
# pygame.draw.line(screen, (255, 70, 70), (renderCamera.x, #renderCamera.y), !тут проблема!)
camera.py:
class Camera:
def __init__(self, x, y):
self.x = x
self.y = y
Ответы (2 шт):
Пусть начало луча start, угол наклона Fi, размеры экрана width, height
Единичный вектор направления
dx = Cos(Fi)
dy = Sin(Fi)
Параметрическое уравнение луча для справки (в коде не нужно):
//x = start.x + dx * t
//y = start.y + dy * t
Границы, в которые может упереться луч
if dx > 0 then
bx = width
else
bx = 0
if dy > 0 then
by = height
else
by = 0
Проверка на вертикаль или горизонталь
if dx == 0 then
return ix = start.x, iy = by
if dy == 0 then
return iy = start.y, ix = bx
В общем случае найдём параметры параметрического уравнения
tx = (bx - start.x) / dx
ty = (by - start.y) / dy
И возьмем точку пересечения с меньшим значением параметра
if tx <= ty then
ix = bx
iy = start.y + tx * dy
else
iy = by
ix = start.x + ty * dx
return ix, iy //вот она, точка пересечения с границей
возможно ответ выше был непонятен...
import pygame
import math
def get_pos(start_pos, distance, angle):
rad = angle / 180 * math.pi
return (\
start_pos[0] + math.cos(rad) * distance,\
start_pos[1] + math.sin(rad) * distance )
start_pos это (число, число) (кортёж или список двух чисел)
distance это число
angle это число
внутри функции градусы переводятся в радианы т.к. это sin cos принимают в аргумент - угол в радианах)
а также из за перевёрнутой по y системы координат угол надо брать отрицательный
и кстати точка с нулевым углом находится справа
(при необходимости можно вычесть из rad - math. pi / 2)
не совсем понятен вопрос, в том плане какая именно точка нужна, так например в ответе чуть ранее взяли точку пересечения с границей о которой вроде не говорится в вопросе, я же взял точку на круге с радиусом distance
