Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2023, 23:47   #1
himecu
Пользователь
 
Регистрация: 09.12.2021
Сообщений: 32
По умолчанию Триангуляция Делоне

В коде, который использует библиотеки NumPy, Matplotlib, SymPy и SciPy, реализована функция plot_inequalities, которая должна строить график области пересечения двух неравенств, используя триангуляцию Делоне. Однако, при запуске кода, триангуляция Делоне не строится, не знается в чем может быть причина?
Код:
import numpy as np
import matplotlib.pyplot as plt
from sympy import *
from scipy.spatial import Delaunay
 
def plot_inequalities(inequality1, inequality2, x_min, x_max, y_min, y_max):
    x, y = symbols('x y')
 
    try:
        inequality1_expr = sympify(inequality1)
        inequality2_expr = sympify(inequality2)
    except:
        print("Ошибка: некорректный формат неравенства.")
        return
 
    try:
        F1 = lambdify((x, y), inequality1_expr, 'numpy')
        F2 = lambdify((x, y), inequality2_expr, 'numpy')
    except:
        print("Ошибка: не удалось скомпилировать неравенства.")
        return
 
    # Создание сетки значений x и y
    x_vals = np.concatenate(([0], np.linspace(x_min, x_max, 400)))
    y_vals = np.linspace(y_min, y_max, 400)
    X, Y = np.meshgrid(x_vals, y_vals)
    # Проверка неравенств в каждой точке сетки
    inequality1_result = F1(X, Y)
    inequality2_result = F2(X, Y)
 
    # Нахождение точек пересечения неравенств
    intersection_points = []
    for i in range(len(x_vals)):
        for j in range(len(y_vals)):
            if inequality1_result[j, i] < 0 and inequality2_result[j, i] > 0:
                intersection_points.append([x_vals[i], y_vals[j]])
 
    intersection_points = np.array(intersection_points)
 
    # Триангуляция Делоне по точкам пересечения
    if len(intersection_points) >= 3:
        tri = Delaunay(intersection_points[:, :2])
 
        # Построение графика
        plt.triplot(intersection_points[:, 0], intersection_points[:, 1], tri.simplices.copy(), color='black')
 
    # Отображение графика
    plt.xlabel('x')
    plt.ylabel('y')
    plt.grid(False)
    plt.axis('equal')
    plt.xlim(x_min, x_max)
    plt.ylim(y_min, y_max)
    plt.show()
 
# Запуск программы
print("Введите неравенство снизу в формате 'F(x, y) > 0':")
inequality1 = input()
print("Введите неравенство сверху в формате 'F(x, y) < 0':")
inequality2 = input()
print("Введите границы интервала x в формате 'x_min, x_max':")
x_min, x_max = map(float, input().split(','))
print("Введите границы интервала y в формате 'y_min, y_max':")
y_min, y_max = map(float, input().split(','))
 
plot_inequalities(inequality1, inequality2, x_min, x_max, y_min, y_max)
случай неравенств y-x>0 и y-x^2<0
Снимок.PNG
himecu вне форума Ответить с цитированием
Старый 05.06.2023, 04:43   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Просто треугольники маленькие и сливаются.
Изображения
Тип файла: jpg Delaunay.jpg (69.5 Кб, 1 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.06.2023, 15:35   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

И проверьте знаки - вводите > и <, а используете < и >.
p51x вне форума Ответить с цитированием
Старый 07.06.2023, 23:21   #4
himecu
Пользователь
 
Регистрация: 09.12.2021
Сообщений: 32
По умолчанию

BDA, хорошо, большое спасибо вам, да просто разбиений было слишком много
himecu вне форума Ответить с цитированием
Старый 07.06.2023, 23:46   #5
himecu
Пользователь
 
Регистрация: 09.12.2021
Сообщений: 32
По умолчанию

p51x, спасибо, но при изменении нарушается триангуляция. не знаете в чем может быть проблема?
Снимок.PNG
himecu вне форума Ответить с цитированием
Старый 08.06.2023, 15:49   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

в том что там "разрыв" https://www.wolframalpha.com/input?i...%3C0+and+y%3Ex
p51x вне форума Ответить с цитированием
Старый 08.06.2023, 16:25   #7
himecu
Пользователь
 
Регистрация: 09.12.2021
Сообщений: 32
По умолчанию

p51x, хорошо спасибо, я понял, а как сделать так, чтобы на дангном разрыве не было триангуляции?
himecu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доработка Триангуляции Делоне. Steavy Помощь студентам 0 09.12.2018 21:19
Триангуляция Делоне aston901 Помощь студентам 7 16.02.2014 21:59
Триангуляция Делоне vbutrim C# (си шарп) 1 22.06.2012 12:48
триангуляции Делоне(сама программа). Ferocious Помощь студентам 2 22.05.2012 13:34
Триангуляция Делоне aston901 Помощь студентам 3 29.11.2010 14:04