| 
| 
 | Вопрос # 6 413/ вопрос закрыт / | 
 |  Доброго дня, уважаемые эксперты.Подскажите пожалуйста, на TImage нарисована окружность с известным центром и радиусом. Пытаюсь выявить. когда курсор выйдет за пределы окружности с помощью уравнения окружности, но когда курсор перемещаешь ровно по оси Y вниз, то уравнение не рассчитывается, а если перемещать по диагонали, то событие работает примерно на два радиуса от центра дальше. Подскажите пожалуйста как правильно реализовать формулу?
 Приложение:Переключить в обычный режим procedure TForm1.imMouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);varoX, 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: Вопрос закрыт (решение принял автор вопроса — Димон): Вопрос решен Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |