Как рассчитать точку пересечения секущей линии и окружности?

Рейтинг: 0Ответов: 0Опубликовано: 09.05.2023

Например: введите сюда описание изображения В круге 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()

Ответы

Ответов пока нет.