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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2017, 11:28   #21
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
a:=2*pi-a;
А это зачем? Без этого нормально работает, а с этим фигня какая-то получается.
BLACK_RAIN вне форума Ответить с цитированием
Старый 01.11.2017, 11:44   #22
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
а с этим фигня какая-то получается
А ты погоняй по всем диапазонам углов
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.11.2017, 11:50   #23
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А ты погоняй по всем диапазонам углов
Гонял. Без этой строчки работает во всех диапазонах. А с ней ось как будто зеркально переворачивается. Там где 20, там 340 и т.д. А линия вообще не понятно в какую сторону рисуется.
BLACK_RAIN вне форума Ответить с цитированием
Старый 01.11.2017, 11:56   #24
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А при чем здесь линия? Это преобразование нужно делать после отрисовки по старой формуле ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.11.2017, 12:04   #25
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Это преобразование нужно делать после отрисовки по старой формуле ))
ок, протупил.
но ось всё-равно перевёрнутая получается.
BLACK_RAIN вне форума Ответить с цитированием
Старый 01.11.2017, 12:09   #26
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
но ось всё-равно перевёрнутая получается.
Ну и ладушки, у меня все Ok
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.11.2017, 12:13   #27
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ну и ладушки, у меня все Ok
интересно, почему так?
скиньте весь юнит, если можно
BLACK_RAIN вне форума Ответить с цитированием
Старый 01.11.2017, 12:41   #28
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
procedure TForm1.DrawAngle(x,y,radius: Integer; angle: Real);
begin
  Canvas.MoveTo(x,y);
  Canvas.Ellipse(x-radius,y-radius,x+radius,y+radius);
  Canvas.LineTo(Round(x + Cos(angle)*radius), Round(y + Sin(angle)*radius));
end;

procedure TForm1.FormClick(Sender: TObject);
const x = 300; y = 300; r = 100;
var xPos: TPoint;
    xAngle: Real;
begin
  xPos:=ScreenToClient(Mouse.CursorPos);
  if xPos.X<>x then begin
    xAngle:=ArcTan((xPos.Y-y)/(xPos.X-x));
    if xPos.X<x then xAngle:=xAngle+pi;
  end  
  else if xPos.Y>y then xAngle:=pi/2
  else xAngle:=pi/2+pi;
  DrawAngle(x,y,r,xAngle);
  if xAngle<0 then xAngle:=xAngle+2*pi;
  xAngle:=2*pi-xAngle;
  Edit1.Text:=FloatToStr(xAngle*180/pi);
end;
ps только не нужно рисовать на канвас формы в onclick )) это по быстрому набросал для демонстрации
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 01.11.2017 в 16:46.
Аватар вне форума Ответить с цитированием
Старый 08.11.2017, 13:21   #29
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

аватар
Сейчас попробовал ваш код. Работает.
но остаётся вопрос:
Код:
  xAngle:=2*pi-xAngle;
Для чего нужна эта строчка?
Я пробовал и с ней и без нее. Она просто инвертирует ось против часовой стрелки. То есть, без нее ось такая: 0 справа, 90 внизу, 180 слева, 270 вверху. А с ней: 0 справа, 270 внизу, 180 слева, 90 вверху.
Больше эта строчка не делает ничего. Во всяком случае, другого эффекта я не вижу.
BLACK_RAIN вне форума Ответить с цитированием
Старый 08.11.2017, 13:39   #30
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Нет часовой стрелки. Просто угол пересчитывается относительно оси Y вверх направленной. Если убрать её и предыдущую, то 30 градусов отобразится как -30 или 330
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить взаимное расположение точки с координатами (x_0,y_0) и окружности радиуса R с центром в точке (x_1,y_1). С# :) OlgaRostov C# (си шарп) 3 24.09.2015 20:26
Нарисовать линию на картинке spirit-ua PHP 13 02.07.2015 09:30
Найти взаимное расположение окружности радиуса R с центром в точке (x0, y0) и точки А с координатами (x1, y1). Dimazde Паскаль, Turbo Pascal, PascalABC.NET 1 10.12.2013 08:58
Нужно изменить на языке C++ Найти такую точку, что шар радиуса R с центром в этой точке, содержит min число точек заданного мн-ва. Alexandr95 Помощь студентам 0 26.05.2013 19:55