Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2010, 22:48   #11
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от zumm Посмотреть сообщение
МдЭ ребятА, не помогли вы мне на этот раз, пришлось и правда читать матчасть и использовать матрицы...
1. Levsha100 этот способ и рекомендовал.
2. Где матрицы в коде?
3. У Вас поворот фигуры сейчас без матриц реализован? Обычно все эти преобразования делают на матрицах, т.к. оно понятнее и быстрее для множества точек делается.
pu4koff вне форума Ответить с цитированием
Старый 10.07.2010, 23:53   #12
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Что значит где матрица? А поворот по вашему как осуществляется?
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 11.07.2010, 00:21   #13
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от zumm Посмотреть сообщение
Что значит где матрица? А поворот по вашему как осуществляется?
Странная матрица какая-то. Массив какой-то. И зачем поворот для проверки попадения в данном случае тоже непонятно. Странно всё как-то.
В функцию передаётся нормальный квадрат, поворачивается и проверяется попали или нет? Может проще точку повернуть и проверить: попала ли она в неповернутый квадрат?
pu4koff вне форума Ответить с цитированием
Старый 11.07.2010, 01:07   #14
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Не знаю жива ли сама тема (чтот не могу найти ), но в Яндексе вродь осталась сохранённая копия - открывается?
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 11.07.2010, 04:54   #15
Rapid
Форумчанин
 
Аватар для Rapid
 
Регистрация: 01.09.2007
Сообщений: 747
По умолчанию

Цитата:
По мне так уровень 7-8 (начало изучения геометрии) класса среднеобразовательной школы.
Матрицы и уравнения фигур туда не входят.
Никому не верьте.
Rapid вне форума Ответить с цитированием
Старый 12.07.2010, 11:26   #16
Snejnaya
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 219
По умолчанию

можно "повернуть" квадрат и рассматриваемую точку до горизонтального положения, а дальше по варианту MaTBeu. Это будет быстрее и легче, чем строить уравнения прямых.
Если угол "наклона" квадрата неизвестен его можно найти через скалярное произведение векторов.

Последний раз редактировалось Snejnaya; 12.07.2010 в 11:35.
Snejnaya вне форума Ответить с цитированием
Старый 12.07.2010, 11:33   #17
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Snejnaya, к сожалению, у нас может быть не только квадрат но и прямоугольник. Я уже решил как это сделать, и все работает на матрицах.

PS но все равно спс, сейчас всем хоть как то помогавшим спасибки поставлю.
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 12.07.2010, 18:44   #18
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Векторное/псевдоскалярное произведения.
Считаются произведения (P[] - вершины выпуклого многоугольника, 0 - заданная точка):
(x[i] - x0) * (y[i+1] - y[i]) - (x[i+1] - x[i]) * (y[i] - y0)
Если они одинакового знака, то точка внутри многоугоьника, если что-то из этого - ноль, то на стороне, иначе вне.
Код:
type
	TPoint = record
		x, y: Double;
	end;

function PointInConvexPolygon(const p0: TPoint; const polygon: array of TPoint): Boolean;
const
	prec = 1e-8;
var
	pos, neg: Boolean;
	prod: Double;
	i: Integer;
	p1, p2: ^TPoint;
begin
	pos := false;
	neg := false;
	for i := Low(polygon) to High(polygon) - 1 do
	begin
		p1 := @polygon[i];
		p2 := @polygon[i + 1];
		prod := (p1.x - p0.x) * (p2.y - p1.y) - (p2.x - p1.x) * (p1.y - p0.y);
		pos := pos or (prod > +prec);
		neg := neg or (prod < -prec);
		if not (pos and neg) then
			continue;
		Result := false;
		exit;
	end;
	p1 := @polygon[High(polygon)];
	p2 := @polygon[Low(polygon)];
	prod := (p1.x - p0.x) * (p2.y - p1.y) - (p2.x - p1.x) * (p1.y - p0.y);
	pos := pos or (prod > +prec);
	neg := neg or (prod < -prec);
	Result := not (pos and neg);
end;
Проверял не слишком тщательно, но вроде работает.

Последний раз редактировалось Somebody; 12.07.2010 в 18:49.
Somebody вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Геометрия zumm Свободное общение 3 07.07.2010 18:37
Си геометрия Денни Помощь студентам 11 05.03.2010 09:41
MDIChild снова и снова... Siber_Dec Общие вопросы Delphi 2 13.12.2009 03:24
Геометрия Levsha100 Помощь студентам 5 29.09.2009 09:56