Страницы: 1
RSS
Определение наложения объектов (или его отсутствия)
 
Здравствуйте, уважаемые программисты. Помогите разобраться.

Вопрос такой, как определить фигуры - наложены друг на друга или нет ?
Сейчас у меня на листе две определенные фигуры.
Если они стоят на некоем расстоянии друг от друга - то в ячейку C5 - ставится "0".
Если они накладываются друг на друга (полностью или  немного) - то в ячейку C5 - ставится "1".

Имеется ввиду наложение не видимых фигур, а вот этих рамок-контуров (обозначающих ширину и высоту).
 
Если фигуры не имеют угла поворота, то ничего сложного. Только не наблюдаются в файле ваши попытки. Или лень не позволяет даже попытаться?
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Если фигуры не имеют угла поворота, то ничего сложного.
Пивет, Михаил.
Что-то вы круты сегодня в VBA. А если фигуры только кривыми Безье описываются - тоже легко?
 
БМВ, нет лень тут не причем.
Просто я не понимаю как это сделать.
У обоих фигур есть координаты их размещения (верхний левый угол).
Также у них есть показатели Ширины и Высоты.
Если они размещены по горизонтали как сейчас - то с моей точки зрения надо "X1+Ширина1" сравнить с "X2".
Если "X1+Ширина1"  больше чем "X2" - то значит фигуры наложились.

С другой стороны показатель X1 в "X1+Ширина1"  может быть очень большим, и несмотря на то, что этот показатель будет превышать "X2" - это ведь не будет визуально означать что фигуры наложились.

И есть еще сравнения по вертикали. И по диагонали наверное как-то нужно сравнивать.

Вот поэтому и спрашиваю на форуме - как это сделать.
 
Андрей VG, Андрей, привет.  просто внимание повышено :-)
Цитата
Ленивый Вася написал:
а вот этих рамок-контуров (обозначающих ширину и высоту).
По вопросам из тем форума, личку не читаю.
 
Цитата
Андрей VG написал:
А если фигуры только кривыми Безье описываются - тоже легко
Это в смысле Полилинии имеете ввиду ?
Но они же при выделении - тоже предстают в виде прямоугольника.

Речь же о том, как сравнивать вот эти прямоугольные области, которые описывают Ширину-Высоту объекта.
 
Есть простой метод   Разница между минимальных из крайних правых и максимальных из крайних левых при пересечении больше 0, а если еще и соприкосновения считать, то больше или равно нулю.
Тоже самое по крайним нижним и верхним и если и там  и там выполняется условие, то есть наложение.
Изменено: БМВ - 25.12.2018 21:12:25
По вопросам из тем форума, личку не читаю.
 
Код
Function FigIntersect(nm1$, nm2$) As Boolean
  Dim sp1, sp2
  Set sp1 = ActiveSheet.Shapes(nm1):  Set sp2 = ActiveSheet.Shapes(nm2)
  FigIntersect = Abs(sp1.Left + sp1.Width / 2 - sp2.Left - sp2.Width / 2) <= (sp1.Width + sp2.Width) / 2 _
    And Abs(sp1.Top + sp1.Height / 2 - sp2.Top - sp2.Height / 2) <= (sp1.Height + sp2.Height) / 2
End Function
Изменено: Ігор Гончаренко - 25.12.2018 21:27:25
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ленивый Вася написал:
а вот этих рамок-контуров (обозначающих ширину и высоту).
Приношу свои извинения - слона-то я и не приметил :(
 
Ігор Гончаренко, слушайте - у вас там что-то очень сложное, с выпадающими окнами.

Как - просто запись сделать в ячейку C5 (0 или 1) ?
 
Код
Sub test()
  [c5] = -FigIntersect(Cells(5, 12), Cells(6, 12))
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, спасибо.
Теперь у меня сразу пойдут дела на лад.
Страницы: 1
Наверх