Как рассчитать точку пересечения секущей линии и окружности?
Например:
В круге 3 цифры это x, y, радиус
В начальных и конечных точках линий цифры это x и y
Нужно посчитать пересекаются ли они с кругом и если да то где
Полный код:
https://drive.google.com/file/d/1DFqnKnUzWxpLXdziHSZemKaGL7aHTIFp/view?usp=share_link
Минимальный воспроизводимый код:
camera.py
class Camera:
def __init__(self, x, y):
self.x = x
self.y = y
main.py
import pygame
import controls
import camera
import render
screen_size = {'width':500,'height':500}
def run():
renderCamera = camera.Camera(300, 350)
pygame.init()
screen = pygame.display.set_mode((screen_size['width'],screen_size['height']))
pygame.display.set_caption('3d game')
while True:
controls.events(renderCamera)
pygame.draw.rect(screen, (255, 255, 255), pygame.Rect(0, 0, 500, 500))
render.render_position(screen, renderCamera)
pygame.display.flip()
run()
render.py
import pygame
import math
def render_position(screen, renderCamera):
for x in range(0, 1):
pygame.draw.circle(screen, (70, 70, 255), (250, 250), 30)
angle = 0
lines = []
while angle <= 360:
if angle < 90:
lines.append((renderCamera.x + math.sqrt(
math.pow((500 - renderCamera.y) / math.cos(math.radians(angle)), 2) - math.pow(500 - renderCamera.y,
2)), 0))
elif angle < 180:
lines.append((renderCamera.x + math.sqrt(
math.pow((500 - renderCamera.y) / math.cos(math.radians(angle)), 2) - math.pow(500 - renderCamera.y,
2)), 500))
elif angle < 270:
lines.append((renderCamera.x - math.sqrt(
math.pow((500 - renderCamera.y) / math.cos(math.radians(angle)), 2) - math.pow(500 - renderCamera.y,
2)), 500))
elif angle < 360:
lines.append((renderCamera.x - math.sqrt(
math.pow((500 - renderCamera.y) / math.cos(math.radians(angle)), 2) - math.pow(500 - renderCamera.y,
2)), 0))
for line in lines:
pygame.draw.line(screen, (255, 70, 70), (renderCamera.x, renderCamera.y), line)
angle += 3
pygame.draw.circle(screen, (70, 255, 70), (renderCamera.x, renderCamera.y), 3)
controls.py
import pygame
import sys
def events(renderCamera):
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
Источник: Stack Overflow на русском