Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 12.11.2018
Сообщений: 28

Найти площадь пересечения двух фигур

10.12.2020, 16:07. Показов 6216. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Даны координаты прямоугольника и прямоугольного треугольника. Найти площадь пересечения двух фигур.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.12.2020, 16:07
Ответы с готовыми решениями:

Найти область пересечения фигур
Здравствуйте, господа. Ситуация такова: имеется два массива точек (каждая - объект, хранящий 3 координаты, по x, y и z), все точки обоих...

Определить какая из двух фигур – круг или квадрат имеют большую площадь. Сторона квадрата равна a, радиус круга равен r
Определить какая из двух фигур – круг или квадрат имеют большую площадь. Сторона квадрата равна a, радиус круга равен r. Вывести на...

OpenCV: найти соотношение площади пересечения двух фигур до их обьединения
Всем привет! Изучаю OpenCV и столкнулась с таким заданием: есть картинка, на которой нарисовано две фигуры, которые пересекаются....

10
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
10.12.2020, 16:22
Meyia, Даны координаты каких точек? Дайте математическое решение задачи, что бы можно было составить алгоритм и начните писать свой вариант кода.
0
0 / 0 / 0
Регистрация: 12.11.2018
Сообщений: 28
10.12.2020, 17:41  [ТС]
Двух точек прямоугольника и двух точек треугольника. (катеты треугольника параллельны осям координат)
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
10.12.2020, 18:02
Meyia, две точки треугольника можно понять, но две прямоугольника?
Может у прямоугольника одна точка?

Добавлено через 1 минуту
Понял

Добавлено через 1 минуту
Meyia, пример ввода данных есть?
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
10.12.2020, 23:12
Цитата Сообщение от Meyia Посмотреть сообщение
катеты треугольника параллельны осям координат
Поищите в загашнике, может еще что то к условию добавите. Даже условие не можете корректно написать.
0
0 / 0 / 0
Регистрация: 12.11.2018
Сообщений: 28
13.12.2020, 00:52  [ТС]
Сделал реализацию ввода данных.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
from tkinter import *
from math import *
 
root = Tk()
root.geometry("600x600")
root.resizable(width=False, height=False)
 
pole = Canvas(root, width = 400, height = 400, bg = "gray")
pole.create_line(200,400,200,0,width=2,arrow=LAST) 
pole.create_line(0,200,400,200,width=2,arrow=LAST)
x0= 200
y0= 200
xm= 400
ym= 400
S=0
myrect=pole.create_rectangle(0,0,0,0)
mytr=pole.create_line(0,0,0,0)
katet1=pole.create_line(0,0,0,0)
katet2=pole.create_line(0,0,0,0)
tr_rec=pole.create_rectangle(0,0,0,0)
def re():
    global myrect,recx1,recx2,recy1,recy2
    strrecx1=entryrectx1.get()
    strrecy1=entryrecty1.get()
    strrecx2=entryrectx2.get()
    strrecy2=entryrecty2.get()
    recx1=int(strrecx1)
    recy1=int(strrecy1)
    recx2=int(strrecx2)
    recy2=int(strrecy2)
    pole.delete(myrect)
    myrect=pole.create_rectangle(recx1+200,-recy1+200,recx2+200,-recy2+200)
   
   
def re1():
    global mytr,katet1,katet2, trx1,trx2,try1,try2
    strtrx1=entrytrx1.get()
    strtry1=entrytry1.get()
    strtrx2=entrytrx2.get()
    strtry2=entrytry2.get()
    trx1=int(strtrx1)
    try1=int(strtry1)
    trx2=int(strtrx2)
    try2=int(strtry2)
    pole.delete(mytr)
    pole.delete(katet1)
    pole.delete(katet2)
    mytr=pole.create_line(trx1+200,-try1+200,trx2+200,-try2+200)
    katet1=pole.create_line(trx1+200,-try1+200,trx2+200,-try1+200)
    katet2=pole.create_line(trx2+200,-try2+200,trx2+200,-try1+200)
    
def toch():
    global S,tr_rec,trx1,trx2,try1,try2,recx1,recx2,recy1,recy2
    pole.delete(tr_rec)
    a=abs(recx1-recx2)
    b=abs(recy1-recy2)
    S=a*b
    plos=Label(text=S)
    plos.place(x=463,y=537)
    tr_rec = pole.create_rectangle(trx1+200,-try1+200,trx2+200,-try2+200)
 
nadprectx=Label(text="Прямоугольник")
nadprectx.place(x=40,y=435)
nadprectx1=Label(text="x1")
nadprectx1.place(x=40,y=465)
nadprecty1=Label(text="y1")
nadprecty1.place(x=120,y=465)
entryrectx1=Entry(width=10)
entryrectx1.place(x=20,y=485)
entryrecty1=Entry(width=10)
entryrecty1.place(x=100,y=485)
 
nadprectx2=Label(text="x2")
nadprectx2.place(x=40,y=515)
nadprecty2=Label(text="y2")
nadprecty2.place(x=120,y=515)
entryrectx2=Entry(width=10)
entryrectx2.place(x=20,y=535)
entryrecty2=Entry(width=10)
entryrecty2.place(x=100,y=535)
 
postrect=Button(text="Построить", command=re)
postrect.place(x=63,y=567)
####
 
nadptrx=Label(text="Треугольник")
nadptrx.place(x=340,y=435)
nadptrx1=Label(text="x1")
nadptrx1.place(x=340,y=465)
nadptry1=Label(text="y1")
nadptry1.place(x=420,y=465)
entrytrx1=Entry(width=10)
entrytrx1.place(x=320,y=485)
entrytry1=Entry(width=10)
entrytry1.place(x=400,y=485)
 
nadptrx2=Label(text="x2")
nadptrx2.place(x=340,y=515)
nadptry2=Label(text="y2")
nadptry2.place(x=420,y=515)
entrytrx2=Entry(width=10)
entrytrx2.place(x=320,y=535)
entrytry2=Entry(width=10)
entrytry2.place(x=400,y=535)
 
posttr=Button(text="Построить", command=re1)
posttr.place(x=363,y=567)
 
tochki=Button(text="Точки", command=toch)
tochki.place(x=463,y=567)
 
pole.pack() 
 
 
 
root.mainloop
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
13.12.2020, 11:45
Meyia, Раз Вам нужно использовать графику, то это без меня. Ваш код у меня не работает. Удачи.
0
 Аватар для VistaSV30
988 / 332 / 79
Регистрация: 10.04.2012
Сообщений: 1,242
Записей в блоге: 4
18.05.2025, 16:41
Пока решение с двумя прямоугольниками. Сейчас еще попробую с прямоугольником и треугольником
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Площадь пересечения двух прямоугольников
 
def segments_sect(s1, s2): # Длинна пересечения двух отрезков на одной прямой
    a = max(s1[0], s2[0])
    b = min(s1[1], s2[1])
    
    if a < b:
        return b-a
    return 0
 
 
def rect_sect(r1, r2):
    dx = segments_sect([r1[0], r1[2]], [r2[0],r2[2]])
    dy = segments_sect([r1[1], r1[3]], [r2[1],r2[3]])
    return dx*dy
 
    
    
r1 = [2,0,5,3]  # Координаты нижнего левого угла и верхнего правого угла
r2 = [3,0,4,4]
rect_sect(r1, r2)
Добавлено через 1 минуту
Не прошло и 5 лет
0
 Аватар для VistaSV30
988 / 332 / 79
Регистрация: 10.04.2012
Сообщений: 1,242
Записей в блоге: 4
19.05.2025, 10:25
Задача из двух частей:
1) Определить, что хотя-бы одна из вершин треугольника находится внутри прямоугольника;
2) Определить, что хотя-бы одна из сторон треугольника пересекает прямоугольник.

Решение 1.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def Pix_in_Rec(rec, p):
    '''
    Списки координат вершин:
    rec - прямоугольника по противолежащим углам
    p - точки (если точка на границе прямоугольника - пересечения нет)
    '''
    secX = rec[0] < p[0] < rec[2]
    secY = rec[1] < p[1] < rec[3]
    if secX == secY == True:
        return True
    return False
 
 
def VerTr_inRec(tr, rec): # Проверка вершина треугольника внутри прямоугольника
    '''
    Списки координат вершин:
    tr - треугольника
    rec - прямоугольника по противолежащим углам
    '''
    for i in range(0,6,2):
        if VerTr_inRec(rec, tr[i:i+2]): 
            return True
    return False
    
r = [0,0, 5, 3]
t = [3,2, 6,5, 7,2]
print(SecTr_Rec(t, r))
0
 Аватар для Aviz__
2757 / 2064 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
19.05.2025, 19:10
Цитата Сообщение от VistaSV30 Посмотреть сообщение
Не прошло и 5 лет
а зачем ты эту тему поднял? тут не так все просто:
Прямоугольник задан координатами левого нижнего и правого верхнего углов: (x1, y1) и (x2, y2).

Прямоугольный треугольник задан координатами вершины прямого угла (tx, ty) и направлениями катетов (например, вправо-вверх, влево-вверх, вправо-вниз или влево-вниз). Для примера предположим, что катеты направлены вправо и вверх (треугольник "растёт" вправо и вверх от точки (tx, ty)), а длины катетов a и b.

Если прямоугольник и треугольник не пересекаются, площадь равна 0 (тривиальный случай).

Если пересекаются, то область пересечения будет многоугольником (возможно, треугольником, четырёхугольником или пятиугольником).

Python
1
2
3
4
5
6
7
8
9
10
11
from shapely.geometry import Polygon, MultiPolygon
 
 
rectangle = Polygon([(x1, y1), (x2, y1), (x2, y2), (x1, y2)])
triangle = Polygon([(tx, ty), (tx + a, ty), (tx, ty + b)])
 
intersection = rectangle.intersection(triangle)
    
if intersection.is_empty: return 0.0
elif isinstance(intersection, Polygon): return intersection.area
elif isinstance(intersection, MultiPolygon): return sum(p.area for p in intersection.geoms)
1
19.05.2025, 19:37

Не по теме:

Цитата Сообщение от Aviz__ Посмотреть сообщение
а зачем ты эту тему поднял?
Мне по работе надо похожую задачу решить

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.05.2025, 19:37
Помогаю со студенческими работами здесь

Найти площадь от пересечения двух треугольников
Заданы два равных равнобедренных треугольника со сторонами 1, 4, 4. Они наложены друг на друга (см. рис.) так, что один (наибольший) угол у...

Найти площадь пересечения двух многоугольников
Найти площадь пересечения двух многоугольников. Предусмотреть ввод координат и количество вершин с клавиатуры и вывод многоугольников на...

Найти площадь пересечения двух прямоугольников
На плоскости даны два прямоугольника, каждый прямоугольник задан координатами левого нижнего и правого верхнего угла. Найдите площадь...

Найти площадь пересечения двух кругов
Как найти площадь пересечения двух кругов если известно точки пересечения. A(-1;2) , B(1;2) - точки пересечения.

Точки пересечения и площадь 2 фигур, ограниченных прямыми
Помогите пожалуйста! Написал код для определения того, попадает ли каждая из точек в указанную область(см.картинку). Но я не понимаю как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru