|
Вопрос # 6 413/ вопрос закрыт / |
|
Доброго дня, уважаемые эксперты.
Подскажите пожалуйста, на TImage нарисована окружность с известным центром и радиусом. Пытаюсь выявить. когда курсор выйдет за пределы окружности с помощью уравнения окружности, но когда курсор перемещаешь ровно по оси Y вниз, то уравнение не рассчитывается, а если перемещать по диагонали, то событие работает примерно на два радиуса от центра дальше. Подскажите пожалуйста как правильно реализовать формулу?
Приложение: Переключить в обычный режим- procedure TForm1.imMouseMove(Sender: TObject; Shift: TShiftState; X,
- Y: Integer);
- var
- oX, oY: Integer;
- begin
- oX:=63;
- oY:=63;
- if (Sqr(X - (oX)) + Sqr(Y - (oY)) >
- (Sqr(14))
- begin
-
- end;
- end;
 |
Вопрос задал: Димон (статус: Посетитель)
Вопрос отправлен: 18 апреля 2013, 07:34
Состояние вопроса: закрыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
Разбираться в твоём коде не стал, ибо влом и проще написать свой с нуля. Ну дык вот:
procedure TMainForm.BoxPaint(Sender: TObject);
begin
// отрисовка окружности/эллипса
with Box do
begin
Canvas.Brush.Color:= clRed;
Canvas.Ellipse(0, 0, Width - 1, Height - 1);
end;
end;
procedure TMainForm.BoxMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
a, b: Single; // радиусы эллипса
Condition: Single;
Temp: string;
begin
with StatusBar do
begin
Panels[0].Text:= IntToStr(X);
Panels[1].Text:= IntToStr(Y);
// условие нахождения точки внутри эллипса: x^2 / a^2 + y^2 / b^2 <= 1
a:= Box.Width / 2; // радиус по оси X
b:= Box.Height / 2; // радиус по оси Y
Condition:= Sqr(X - a) / Sqr(a) + Sqr(Y - b) / Sqr(b);
// (X - a) и (Y - b) - потому что точка (0, 0) не в центре эллипса, а в углу формы
Temp:= FloatToStrF(Condition, ffFixed, 15, 2);
if Condition <= 1.0
then Panels[2].Text:= 'Inside (' + Temp + ')'
else Panels[2].Text:= 'Outside (' + Temp + ')';
end;
end;

Проект прицепляю к ответу. К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 18 апреля 2013, 09:14
Оценка за ответ: 5
Комментарий к оценке: Вопрос решен великолепно. Спасибо min@y™
|
Мини-форум вопроса
Всего сообщений: 0.
18 апреля 2013, 09:34: Вопрос закрыт (решение принял автор вопроса — Димон): Вопрос решен
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|