ПредишенСледващото

Проверете дали точката принадлежи на правоъгълника

Известни координати на върховете на правоъгълника (на самолет), си ъгъл на завъртане (спрямо центъра), и координатите на точка. Как програма, за да се види дали точката принадлежи на правоъгълника, или не?

Намерено в общия случай за полигона (можете да получите всички върхове с сумиране на ъглите между векторите на "горната точка до" (ако е + -360, той принадлежи към)), но някак си по-лесно да се направи.

намерят признаци на вектор продукт на страните и точката отгоре-, т.е. определи дали дадена точка се намира от лявата страна на всяка страна, когато става наоколо обратна на часовниковата стрелка

Аналитичната геометрия волове.
Всяко директно (в правоъгълник - е chetyer линии) разделят равнината на две части + и -.
Ако заместим координати на точка в # XA0; уравнение на линията след това получи разстояние от точката да ръководи, има знак, показващ принадлежността към една от тези части.
Съответно, ще бъде нещо като това:
# XA0; # XA0; # XA0; +
# XA0; -----------
| # XA0; # XA0; - # XA0; # XA0; |
| # XA0; # XA0; # XA0; # XA0; # XA0; |
+| - # XA0; # XA0; # XA0; # XA0; # XA0 - | +
| # XA0; # XA0; # XA0; # XA0; # XA0; |
| # XA0; # XA0; - # XA0; # XA0; |
# XA0; -----------
# XA0; # XA0; # XA0; +
Вложени проверява дали podstvanovki резултат винаги е по-малка или равна на 0, точката в правоъгълника.

Послепис
Знакът зависи от посоката на вектора на направление за определяне на линията, то трябва да се разглежда.

глупава формула като се ориентират превръщайки всички точки на правоъгълника, че хоризонтално правоъгълник, а след това proveryaetsa както обикновено.

Или още може да бъде както е посочено в [2], за да се направи. Ние търсим за височината на точката към линията. Ако всички височината на положителна или отрицателна, това означава, че от вътрешната страна (ако байпас линия е една и съща). С цел да се намери височината може да се изгради два правоъгълен триъгълник, а от тях се изведе формула на обща крак, който ще бъде висока.

---
. ние се ходи по тънка линия и по-добре да се избегне рискът.

Хм. Четох субекта # XA0; неправилно и публикуван в [1] като принадлежащи към триъгълника)

За правоъгълника не е нужно всички четири страни на измамата. Достатъчно, за да се разреши вектор първия връх - точката на векторите на двете съседни страни, и да се провери, че и двете координати параметрични са в диапазона 0..1. Отдели дори не се нуждаят, когато се сравняват не с единство и с дискриминантен (като се има предвид неговата знак)

> И това, което е предложено в zarulivaet [1]. Само тези яйца
> Side.

Разгърнати яйца. ))
И алгоритъмът е същият, ако разбирам правилно.

Има един много прост, но и най-бавния алгоритъм правоъгълник е 2 триъгълници -> намерете размер е правоъгълник, след това вземете точка и от нея се изгради 4 treugolka (точка отгоре и отстрани на триъгълника съвпада с една от страните на правоъгълника) надолу размер е 4 триъгълници и сравни с грешка с Дневна повърхност правоъгълник всичко.

# XA0; # XA0; # XA0; # XA0; # XA0; # XA0; ако флаг след това
# XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; започне
# XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; // близо до линията, в вата
# XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; // ч (тук, може би, л) - разстоянието от точка на линия.
# XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; край;
# XA0; # XA0; # XA0; # XA0; # XA0; край;
приключи;

С една дума, ако все още мисля, че можете да направите това, което е необходимо)


> Ако заместим координатите на точката в # XA0; уравнението на линията
> Получаване на разстоянието от точка до линията,

Чудя се как ли, в този случай, се определя от уравнението за вертикална линия)))

> [11] Darkwingg # XA0; (27.08.07 10:02)

И има някои проблеми. ))

IMHO най pravlno преизчисли координатите на точка в координатната система се основава или на горната част и две перпендикулярни страни на правоъгълник, а след това в сравнение с координатите на дължините на страните. (Процес вече описано по-горе, да формула)

изберете като отправна точка на нова координатна система на долния ляв точка на правоъгълника.

PX, пг - координати на точката в старата координатна система
newpx, newpy - координатите на точка в новата координатна система
брадва, ай - координати на долния ляв точка на правоъгълник (estessno в т координати.).
ла, либри - дължината на страните на правоъгълника

G - на ъгъла на завъртане на правоъгълник в посока на часовниковата стрелка, по отношение на нейната долна лява.

1. newpx = (пиксела - ах) * COS (G) - (пг - AY) * грях (G)
2. newpy = (пиксела - ах) * грях (G) + (PY - Ay) * COS (G)

ако newpx <= la и newpy <= lb, то точка лежит внутри прямоугольника.

истината няма да точно бръмчене, ако дължината на страните на правоъгълника, не са известни, както и известна само на координатите на върховете))) ще трябва да се помисли за по-далеч и това отнема няколко операции.


> И има някои проблеми. ))

хм)), и след това да напишете линейно уравнение, минаваща през точки

> [14] Darkwingg # XA0; (27.08.07 10:59)

Вие няма да учат в гимназията онлайн собственост. )

Първото свойство:
Чрез всеки две различни точки могат да се извършват само насочи.

В Де да знам msluchae уравнение на линията ще бъде:
х = x1
и разстоянието от линията до точката ще бъде разликата x1 и х координатите на точката на.

Хм. Хм), но чрез всеки две различни точки, може да се направи по права линия, обаче, че е само в случай на вертикална линия ще изисква допълнително условие за тестване дали тя е вертикална не всеки ред може да се опише чрез уравнение у = F (х).

Казахте, че просто замени координатите в уравнението на линията, в този случай, моля, напиши уравнението за всички линии, включително вертикална)))

> [16] Darkwingg # XA0; (27.08.07 12:00)

Тук не е необходимо да се заяжда с такива дреболии.
И идиот знае, че вертикалната линия не е yavlyaetsya обикновено директен, дори и само заради това не yavlyaetsya график.
Следователно е необходимо да отделно porveryat.
IMHO по-лесно да се провери, отколкото да използвате вашия метод.
И работата ще бъде по-бързо.


> Тук не е необходимо да се заяжда с такива дреболии.

И това не е точно малка промяна. това е все едно какво ще правиш с линията близо до вертикалата?

Подозирам, че си формула е у = х (y2-Y1) / (x2-x1) + б, в този случай, една малка, но не нула (x2-x1), той просто има пряко, в близост до вертикалата, можете да получите голямо грешка и да пропуснете момента на позиция, а освен това може да е деление на нула.

> Darkwingg
всеки ред може да бъде описан, например, уравнение брадва + с + С = 0


> [18] Darkwingg # XA0; (27.08.07 13:03)

Хм. Аз обикновено се избегне вертикални линии, напротив тя използва директно в близост до вертикалата, обикновено е достатъчно прецизен, дори и на много дълги линии.

> В този случай, няма смисъл от това описание
Ако това е въпрос от коя страна на правата линия, е точката, това описание се вписва перфектно.

Bliin. В Станах ням. Всъщност вече по математика не се придържаме, е необходимо poreshat задачи.

Darkwingg, ето го - същата уравнението.

> @ !! ех
но да се изгради уравненията трябва да направят изчисления за всички страни, които също.

[5] е описан по-икономичен начин.

освен, че в този вид уравнение, също все още трябва да доведе, çäàåò ми се, че този метод на деление на нула vserno не може да избяга. Линия, преминаваща през две точки, ако не бърка, като е описано с формулата:

от Cthulhu барабан и може да се редуцира до форма брадва + с + с = 0, където vserno бъде (х1 - х2) в знаменател.

> [24] Darkwingg # XA0; (27.08.07 15:28)

За да бъда честен не си спомням сега, но ни казаха, как да се избегнат случаите, когато компонент на вектора на направление е 0, то някак си изглежда просто, но това беше много отдавна и не си спомням.

това е нещо, което задължително, косинус, ъгли и вектори не са необичайни и трябва да не се появят проблеми. по принцип няма разделение. sobsno, че е отразено в моя метод))). всички покритие от наводнения. последния пост в тази тема.

> Но за изграждането на уравненията трябва да направите изчисления
> За всички страни, които също.
>
> В [5] е описан по-икономичен начин.

Защо? Двойките поемат посока вектори след pararelnyh директен odinakvye.
И ако правоъгълник, достатъчно е да се намери един, а втората ще бъде на 90 градуса.


> [26] Darkwingg # XA0; (27.08.07 15:41)

Неее. И все пак, аз tuplyu конкретно.
Не съществува деление на нула. Дори и с вертикална линия.
Глупаво е да се компоненти на, добре, един от тях е равен на нула, има умножение, деление не!

> Но за изграждането на уравненията трябва да направите изчисления
> За всички страни, които също.
>
> В [5] е описан по-икономичен начин.

Защо? Двойките поемат посока вектори след pararelnyh директен odinakvye.
И ако правоъгълник, достатъчно е да се намери един, а втората ще бъде на 90 градуса.


> [26] Darkwingg # XA0; (27.08.07 15:41)

Неее. И все пак, аз tuplyu конкретно.
Не съществува деление на нула. Дори и с вертикална линия.
Глупаво е да се компоненти на, добре, един от тях е равен на нула, има умножение, деление не!

Памет: 0,81 MB
Време: 0.03 в

Подкрепете проекта - споделете линка, благодаря!