Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Принадлежит ли точка области Добавлено: 03.10.08 22:07  

Автор вопроса:  D o c a l  | Web-сайт: www.doc-source.pp.net.ua/ | ICQ: 408802757 
Вот короче домашка по программированию.
у нас есть две точки x,y нужно сказать принадлежат ли они зарисованой области на рисунке или нет.проблема в том что я не могу найти которому уравнению принадлежит такой график(внутренний ,ромбик)

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 D o c a l



ICQ: 408802757 

Вопросов: 76
Ответов: 985
 Web-сайт: www.doc-source.pp.net.ua/
 Профиль | | #1
Добавлено: 03.10.08 22:07
а вот и сам рисунок http://www.doc-source.tut.su/pic.JPG

Ответить

Номер ответа: 2
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #2
Добавлено: 03.10.08 22:31
уравнение ромба, если не ошибаюсь |y| = |x-1| на [-1;1]
если ничо не сообразишь, то вот функция определяет принадлежит ли точка треугольнику, правда написана на нете
  1.  
  2. Public Shared Function PointInPoly(ByVal p() As Point, ByVal q As Point) As Boolean
  3.         Dim xnew, ynew As Integer
  4.         Dim xold, yold As Integer
  5.         Dim x1, y1 As Integer
  6.         Dim x2, y2 As Integer
  7.         Dim t As Boolean = False
  8.         xold = p(2).X
  9.         yold = p(2).Y
  10.         For i As Integer = 0 To 2
  11.             xnew = p(i).X
  12.             ynew = p(i).Y
  13.             If xnew > xold Then
  14.                 x1 = xold
  15.                 y1 = yold
  16.                 x2 = xnew
  17.                 y2 = ynew
  18.             Else
  19.                 x1 = xnew
  20.                 y1 = ynew
  21.                 x2 = xold
  22.                 y2 = yold
  23.             End If
  24.             If ((xnew < q.X) = (q.X <= xold) And (q.Y - y1) * (x2 - x1) < (y2 - y1) * (q.X - x1)) Then t = Not t
  25.             xold = xnew
  26.             yold = ynew
  27.         Next
  28.         If t Then Return True
  29.         xold = p(3).X
  30.         yold = p(3).Y
  31.         For i As Integer = 0 To 3
  32.             If i = 1 Then Continue For
  33.             xnew = p(i).X
  34.             ynew = p(i).Y
  35.             If xnew > xold Then
  36.                 x1 = xold
  37.                 y1 = yold
  38.                 x2 = xnew
  39.                 y2 = ynew
  40.             Else
  41.                 x1 = xnew
  42.                 y1 = ynew
  43.                 x2 = xold
  44.                 y2 = yold
  45.             End If
  46.             If ((xnew < q.X) = (q.X <= xold) And (q.Y - y1) * (x2 - x1) < (y2 - y1) * (q.X - x1)) Then t = Not t
  47.             xold = xnew
  48.             yold = ynew
  49.         Next
  50.         Return t
  51.     End Function



разбиваешь ромб на 2 треугольника и вперед

Ответить

Номер ответа: 3
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #3
Добавлено: 03.10.08 22:33
вру эт функция принадлежности четырехугольнику как раз, так что сразу туда ромб пихай

Ответить

Номер ответа: 4
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #4 Добавлено: 04.10.08 00:08
DOCAL, тебе верно говорят, но нужно сделать не уравнение а неравенство.
У тебя получится два неравенства (одно для ромба, второе для круга) - нужно проверить чтоб
1) Точки удовлетворяли неравенству для круга
2) Точки не удовлетворяли неравенству ромба

Думаю сработает :)

Ответить

Номер ответа: 5
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #5
Добавлено: 04.10.08 10:57
+1

Ответить

Номер ответа: 6
Автор ответа:
 D o c a l



ICQ: 408802757 

Вопросов: 76
Ответов: 985
 Web-сайт: www.doc-source.pp.net.ua/
 Профиль | | #6
Добавлено: 04.10.08 11:18
Бренд ты прав спору нет.проблема в том что я не знаю уравнения зделать как же я не равенство зделаю.как зделать все я знаю.проблема только з ромбиком.Skywalker

Ответить

Номер ответа: 7
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #7
Добавлено: 04.10.08 13:25
Думаю, так должно работать. Хотя толком не проверял.
  1. Private Sub Form_Load()
  2.     ' координаты точки
  3.     Dim X As Single
  4.     Dim Y As Single
  5.     
  6.     Dim A As Single ' полуось ромба
  7.     Dim r As Single ' радиус окружности
  8.     
  9.     Dim Result As Boolean
  10.  
  11.     X = 1.3
  12.     Y = 1.3
  13.     
  14.     A = 1
  15.     r = 2
  16.     Result = (Abs(X * X) + Abs(Y * Y) <= Abs(r * r)) And (Abs(X) + Abs(Y) >= Abs(A))
  17.     'true - принадлежит, false - нет
  18. End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам