0 / 0 / 0
Регистрация: 12.11.2018
Сообщений: 28

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

10.12.2020, 16:07. Показов 6268. Ответов 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,318
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,245
Записей в блоге: 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,245
Записей в блоге: 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__
2759 / 2066 / 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 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru