VBA Принадлежит ли точка графику

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Электрический кот
Аватара пользователя
Сообщения: 1071
Зарегистрирован: Пн май 04, 2009 16:43:07
Откуда: Набережные Челны

Сообщение Hudgun »

Как можно отпределить непринадлежащие точки треугольной области внизу, например точки (0;-1) и (0;-2), остальные принадлежащие точки вроде нормально определяются?
Задание: определить принадлежит ли точка графику
Изображение
По графику я определил что он состоит из функций y=2-2x , y=2x+2, y=-x и y=x
Исходный код:

Код: Выделить всё

    If (2 - 2 * x <= 2) And (2 - 2 * x >= -2) And (y <= 2) And (y >= 0) Then
    Label4.Caption = "Точка принадлежит графику!"
    Else
        If (2 - 2 * x <= 2) And (2 - 2 * x >= -2) And (-x <= 0) And (-x >= -2) And (y <= 0) And (y >= -2) Then
        Label4.Caption = "Точка принадлежит графику!"
        End If

    End If
    
    If (2 + 2 * x <= 2) And (2 + 2 * x >= -2) And (y <= 2) And (y >= 0) Then
    Label4.Caption = "Точка принадлежит графику!"
    Else
        If (2 + 2 * x <= 2) And (2 + 2 * x >= -2) And (x <= 0) And (x >= -2) And (y <= 0) And (y >= -2) Then
        Label4.Caption = "Точка принадлежит графику!"
        End If
  
    End If
Последний раз редактировалось Hudgun Чт ноя 04, 2010 23:05:40, всего редактировалось 1 раз.
Реклама
lix
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 17, 2010 15:32:19
Откуда: Курган

Сообщение lix »

еще вариант. можно посчитать площади треугольников, образованных соединением этой точки с вершинами треугольника. если сумма площадей равна площади исходного, то точка внутри треугольника.
ну и еще по теме http://algolist.ru/maths/geom/belong/
Реклама
Электрический кот
Аватара пользователя
Сообщения: 1071
Зарегистрирован: Пн май 04, 2009 16:43:07
Откуда: Набережные Челны

Сообщение Hudgun »

Сложно как-то лучи пускать и все такое :)

Я вот тут наткнулся на такое решение:
Составить программу, которая определяет принадлежность точки с координатами (x,y) заштрихованной области.
Изображение
Решение:

Код: Выделить всё

Dim x As Double, y As Double, d As Double
Private Sub Command1_Click()
        x = Text1.Text
        y = Text2.Text
    If (x > 0) And ((x * x + y * y) > 9) And ((x * x + y * y) < 25) Then
        MsgBox "Tochka_prinadlejit_dannomu_promejutku"
    Else
        MsgBox "Tochka_ne_prinadlejit_dannomu_promejutku"
    End If
End Sub
Объясните кто-нибудь, откуда вот эти условия взялись (x * x + y * y) > 9 и (x * x + y * y) < 25
lix
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 17, 2010 15:32:19
Откуда: Курган

Сообщение lix »

Hudgun писал(а):Объясните кто-нибудь, откуда вот эти условия взялись (x * x + y * y) > 9 и (x * x + y * y) < 25
уравнение окружности помните? x^2+y^2=R^2. ну вот, если подставить (x,y) в это уравнение, то возможно 3 случая - сумма квадратов меньше R^2 - точно лежит внутри окружности; равно - на окружности, больше - за пределами окружности. т.е. получается условие верно когда точка лежит за пределами окружности радиуса 3 и втутри окружности радиуса 5. такое возжможно только когда центры окружностей совпадают.
Реклама
Эиком - электронные компоненты и радиодетали
Электрический кот
Аватара пользователя
Сообщения: 1071
Зарегистрирован: Пн май 04, 2009 16:43:07
Откуда: Набережные Челны

Сообщение Hudgun »

Спасибо, по аналогии сделал:

Код: Выделить всё

If (y <= 2 - 2 * x) And (y >= -x) And (x >= 0) Then
Label4.Caption = "Точка принадлежит графику"
Else
    If (y <= 2 * x + 2) And (y >= x) And (x <= 0) Then
    Label4.Caption = "Точка принадлежит графику"
    End If
End If
Вроде работает :)))
Реклама
Ответить

Вернуться в «Интеграция с ПК»