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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2014, 13:46   #41
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Думаю - куда угодно
Vago вне форума Ответить с цитированием
Старый 24.12.2014, 15:32   #42
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,469
По умолчанию

Нашел новую формулу: азимут=ArcTg(sin(дол2-дол1)*cos(шир2)/(cos(шир1)*sin(шир2)-sin(шир1)*cos(шир2)*cos(дол1-дол2))) .
Перевел на нужный язык: azimuth:=ArcTan(sin(x2-x1)*cos(y2)/(cos(y1)*sin(y2)-sin(y1)*cos(y2)*cos(x1-x2)));
Label3.Caption:='угол azimuth '+FloatToStr(alpha);
Всегда получается "0". Значит дело не в математике...
Неудачу положил сюда: http://www.fayloobmennik.net/4429039


Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Math, Grids, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Label3: TLabel;

    procedure Image1Click(Sender: TObject);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);

    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
    mous : TMouse;  // В пункте "Public" создаем mous : TMouse;- объект объявлен

  end;

var
  Form1: TForm1;
  pos:TPoint;
  X: integer;
  Y: integer;
  ang:double;
  T: Tpoint;
  center_of_rotation_X: Integer;
  center_of_rotation_Y: Integer;
  RandASCII: Integer;
  operator:  Integer;
  i,k: Integer;
  ax,ay,r,cx,cy,an:double;



   x0,y0,x00,y00 : Int64; //полюс назначенной полярной системы координат
    x1,y1,x2,y2,x5,y5 : Extended; //координаты изучаемых точек
  dx1, dx2, dy1, dy2, r1 : Int64;
     azimuth   : Extended;//угол
    alpha: Extended;//угол
implementation

{$R *.dfm}
const

NT = 9; //количество столбцов таблицы данных (если поворот на 90 градусов "1/2 pi" то NT = 4), а если врещение, то кратное 4

var
new_position: array[1..NT] of integer;//очередной компонент попавший под курсор





procedure TForm1.Image1Click(Sender: TObject); //щелчок левой кнопкой мыши
  var RadioButton: TRadioButton;

begin

 RadioButton:=TRadioButton.Create(Form1);
  with RadioButton do
  begin
    Parent:=Form1;
    T:=ScreenToClient(Form1.FDesignSize);
    top:=Mouse.CursorPos.Y+T.y;
    left:=Mouse.CursorPos.X+T.x;
    center_of_rotation_X:=378;//координаты нового центра координат относительно старых
    center_of_rotation_Y:=292;//координаты нового центра координат относительно старых
     x1:=Mouse.CursorPos.X+T.x-300;
     y1:=Mouse.CursorPos.Y+T.y-165;

    Width:=140;
    Height:=20;
    Caption:='Левый Click   x1='+ FloatToStr(x1)+ ' y1='+ FloatToStr(y1);


  end;

  end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   Label1.Caption:='текущее положение курсора на Image в старых координатах  '+'x='+ inttostr(Mous.CursorPos.x)+ ' y='+ inttostr(Mous.CursorPos.y);
   Label2.Caption:='проверка нового начала координат    '+'x='+ inttostr(Mouse.CursorPos.X-377)+ ' y='+ inttostr(Mouse.CursorPos.Y-292);
   end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);   //щелчок правой кнопкой мыши
   var
  RadioButton2: TRadioButton;
begin
 RadioButton2:=TRadioButton.Create(Form1);
  with RadioButton2 do
  begin
    Parent:=Form1;
    T:=ScreenToClient(Form1.FDesignSize);
    left:=Mouse.CursorPos.X+T.x;
    top:=Mouse.CursorPos.Y+T.y;
    center_of_rotation_X:=top;
    center_of_rotation_Y:=left;
     x2:=Mouse.CursorPos.X+T.x-300; //проверено:ноль установился
     y2:=Mouse.CursorPos.Y+T.y-165; //проверено:ноль установился
      //  x00:=305-300; //проверено:ноль установился
      // y00:=170-165; //проверено:ноль установился
    Width:=200;
    Height:=20;
    Caption:='Правый Click x2='+ FloatToStr(x2)+ ' y2='+ FloatToStr(y2);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  azimuth:=ArcTan(sin(x2-x1)*cos(y2)/(cos(y1)*sin(y2)-sin(y1)*cos(y2)*cos(x1-x2)));
  Label3.Caption:='угол azimuth      '+FloatToStr(alpha);
 end;

end.
Репутация: полный "0"

Последний раз редактировалось zvygin1964; 24.12.2014 в 16:19.
zvygin1964 вне форума Ответить с цитированием
Старый 25.12.2014, 17:58   #43
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,469
По умолчанию

Ой. Очень извиняюсь. Получилось, работает! Положил сюда: http://www.fayloobmennik.net/4432504


Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Math, Grids, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;

    procedure Image1Click(Sender: TObject);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);

    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
    mous : TMouse;  // В пункте "Public" создаем mous : TMouse;- объект объявлен

  end;

var
  Form1: TForm1;
  pos:TPoint;
  X: integer;
  Y: integer;
  ang:double;
  T: Tpoint;
  center_of_rotation_X: Integer;
  center_of_rotation_Y: Integer;
  RandASCII: Integer;
  operator:  Integer;
  i,k: Integer;
  ax,ay,r,cx,cy,an:double;



   x0,y0,x00,y00 : Int64; //полюс назначенной полярной системы координат
    x1,y1,x2,y2,x5,y5 : Extended; //координаты изучаемых точек
  dx1, dx2, dy1, dy2, r1 : Int64;
     azimuth   : Extended;//угол
    alpha: Extended;//угол
implementation

{$R *.dfm}
const

NT = 9; //количество столбцов таблицы данных (если поворот на 90 градусов "1/2 pi" то NT = 4), а если врещение, то кратное 4

var
new_position: array[1..NT] of integer;//очередной компонент попавший под курсор





procedure TForm1.Image1Click(Sender: TObject); //щелчок левой кнопкой мыши
  var RadioButton: TRadioButton;

begin

 RadioButton:=TRadioButton.Create(Form1);
  with RadioButton do
  begin
    Parent:=Form1;
    T:=ScreenToClient(Form1.FDesignSize);
    top:=Mouse.CursorPos.Y+T.y;
    left:=Mouse.CursorPos.X+T.x;
    center_of_rotation_X:=378;//координаты нового центра координат относительно старых
    center_of_rotation_Y:=292;//координаты нового центра координат относительно старых
     x1:=Mouse.CursorPos.X+T.x-300;
     y1:=Mouse.CursorPos.Y+T.y-165;

    Width:=140;
    Height:=20;
    Caption:='Левый Click   x1='+ FloatToStr(x1)+ ' y1='+ FloatToStr(y1);


  end;

  end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   Label1.Caption:='текущее положение курсора на Image в старых координатах  '+'x='+ inttostr(Mous.CursorPos.x)+ ' y='+ inttostr(Mous.CursorPos.y);
   Label2.Caption:='проверка нового начала координат    '+'x='+ inttostr(Mouse.CursorPos.X-377)+ ' y='+ inttostr(Mouse.CursorPos.Y-292);
   end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);   //щелчок правой кнопкой мыши
   var
  RadioButton2: TRadioButton;
begin
 RadioButton2:=TRadioButton.Create(Form1);
  with RadioButton2 do
  begin
    Parent:=Form1;
    T:=ScreenToClient(Form1.FDesignSize);
    left:=Mouse.CursorPos.X+T.x;
    top:=Mouse.CursorPos.Y+T.y;
    center_of_rotation_X:=top;
    center_of_rotation_Y:=left;
     x2:=Mouse.CursorPos.X+T.x-300; //проверено:ноль установился
     y2:=Mouse.CursorPos.Y+T.y-165; //проверено:ноль установился
      //  x00:=305-300; //проверено:ноль установился
      // y00:=170-165; //проверено:ноль установился
    Width:=200;
    Height:=20;
    Caption:='Правый Click x2='+ FloatToStr(x2)+ ' y2='+ FloatToStr(y2);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label4.Caption:='x1='+ FloatToStr(x1)+ ' y1='+ FloatToStr(y1);
  Label5.Caption:='x2='+ FloatToStr(x2)+ ' y2='+ FloatToStr(y2);
  azimuth:=ArcTan(sin(x2-x1)*cos(y2)/(cos(y1)*sin(y2)-sin(y1)*cos(y2)*cos(x1-x2)));
  Label3.Caption:='угол azimuth      '+FloatToStr(azimuth);
 end;

end.
Репутация: полный "0"
zvygin1964 вне форума Ответить с цитированием
Старый 26.12.2014, 21:44   #44
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,469
По умолчанию

Центр поворота устанавливать научился. Дело за малым: "определить направление поворота". Скалярное произведение...Квадратная матрица... X1=X*cos(a)-Y*sin(a) Y1=X*sin(a)+Y*cos(a)... Как же узнать знак этого поворота?
Репутация: полный "0"
zvygin1964 вне форума Ответить с цитированием
Старый 28.12.2014, 20:49   #45
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,469
По умолчанию

Soul,- хороший человек предложил такой вариант: PloshadTreug:=((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1))/2; //знак показывает слева или справа третья точка находится относительно прямой, образованной первыми двумя точками. Попробую...
Получилось.
alpha:=((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1))/2;
//принимаю, что точка 1(x1,y1) ,- это начало координат "0",заменяю в формуле точку 2 на 1, точку 3 на точку 2, получилось новое уравнение:
alpha:=((x2-0)*(y3-0)-(y2-0)*(x3-0))/2;
alpha:=((x1-0)*(y2-0)-(y1-0)*(x2-0))/2;
итоговое уравнение:
alpha:=((x1)*(y2)-(y1)*(x2))/2;
Изображения
Тип файла: jpg насос сетевой .JPG (68.3 Кб, 109 просмотров)
Вложения
Тип файла: rar щёлкни левой мышкой, щелкни правой мышкой, нажми на Button1.rar (278.8 Кб, 10 просмотров)
Репутация: полный "0"

Последний раз редактировалось zvygin1964; 29.12.2014 в 19:03.
zvygin1964 вне форума Ответить с цитированием
Старый 01.01.2015, 14:18   #46
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,469
По умолчанию

С Новым 2015 годом , сочувствующие мне и безразличные тоже!
Здоровья и мира всем!
Репутация: полный "0"

Последний раз редактировалось zvygin1964; 01.01.2015 в 14:20.
zvygin1964 вне форума Ответить с цитированием
Старый 01.01.2015, 14:34   #47
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Блокбастер - один против ветра...
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 04.01.2015, 08:36   #48
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,469
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
один против ветра кипятком и паром
Необходимые среды для работы можно посмотреть на видео. Положил сюда: http://rghost.ru/private/60127001/2c...bd3adbbee703cf
Репутация: полный "0"
zvygin1964 вне форума Ответить с цитированием
Старый 05.01.2015, 22:31   #49
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,469
По умолчанию

Похоже на то, что я изобретаю компонент AsHyperKnob ?
Репутация: полный "0"

Последний раз редактировалось zvygin1964; 06.01.2015 в 15:08.
zvygin1964 вне форума Ответить с цитированием
Старый 10.01.2015, 11:47   #50
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,469
По умолчанию

Изображение меняю заменой картинки. Другого пока не знаю.
Код:
  public
    { Public declarations }
    mous : TMouse;  // В пункте "Public" создаем mous : TMouse;- объект объявлен
  end;

var
  Form1: TForm1;
  pos:TPoint;
  X: integer;
  Y: integer;
  ang:double;
  T: Tpoint;
  center_of_rotation_X: Integer;
  center_of_rotation_Y: Integer;
  RandASCII, position_StringGrid1, position_StringGrid2: Integer;
  operator:  Integer;
  i,k,m: Integer;
  ax,ay,r,cx,cy,an:double;

  x0,y0,x00,y00 : Int64; //полюс назначенной полярной системы координат
  x1,y1,x2,y2,x5,y5 : Extended; //координаты изучаемых точек
  new_dataxX, new_dataxY : Extended; //координаты изучаемых точек в StringGrid2
  dx1, dx2, dy1, dy2, r1 : Int64;
  alpha: Extended;//угол

  Back, bitmap, Buf : TBitMap;
  Action: TCloseAction;   // фон, картинка, буфер
  BackRct, BufRet: TRect; // область фона, картинки, буфера
  x_bmp,y_bmp:integer;    // координаты левого верхнего угла картинки
  W,H: integer; // размеры картинки

implementation

{$R *.dfm}
const

 NT = 9; //количество столбцов таблицы данных (если поворот на 90 градусов "1/2 pi" то NT = 4), а если вращение, то кратное 4
 NT2 = 5;//количество используемых столбцов=NT2-1
 NT3= 9;
var
 new_position: array[1..NT] of integer;//очередной компонент попавший под курсор
 amount1, amount2, amount3, amount4: integer;//сумма значений каждого из участков
 new_position3: array[1..NT3] of integer;//учебный массив
 new_position2: array[1..NT2] of integer;//массив в StringGrid2 ,очередные координаты левого клика




procedure TForm1.Image1Click(Sender: TObject); //щелчок левой кнопкой мыши
  var RadioButton: TRadioButton;

begin
 RadioButton:=TRadioButton.Create(Form1);
  with RadioButton do
  begin
    Parent:=Form1;
    T:=ScreenToClient(Form1.FDesignSize);
    top:=Mouse.CursorPos.Y+T.y;
    left:=Mouse.CursorPos.X+T.x;
    center_of_rotation_X:=378;//координаты нового центра координат относительно старых
    center_of_rotation_Y:=292;//координаты нового центра координат относительно старых
    x1:=Mouse.CursorPos.X+T.x-300;
    y1:=Mouse.CursorPos.Y+T.y-165;

    Width:=140;
    Height:=20;
    Caption:='Левый Click   x1='+ FloatToStr(x1)+ ' y1='+ FloatToStr(y1);
  end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   Label1.Caption:='текущее положение курсора на Image в старых координатах  '+'x='+ inttostr(Mous.CursorPos.x)+ ' y='+ inttostr(Mous.CursorPos.y);
   Label2.Caption:='проверка нового начала координат    '+'x='+ inttostr(Mouse.CursorPos.X-524)+ ' y='+ inttostr(Mouse.CursorPos.Y-343);

end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);   //щелчок правой кнопкой мыши
 var
  RadioButton2: TRadioButton;
begin
 RadioButton2:=TRadioButton.Create(Form1);
  with RadioButton2 do
  begin
    Parent:=Form1;
    T:=ScreenToClient(Form1.FDesignSize);
    left:=Mouse.CursorPos.X+T.x;
    top:=Mouse.CursorPos.Y+T.y;
    center_of_rotation_X:=top;
    center_of_rotation_Y:=left;
    x2:=Mouse.CursorPos.X+T.x-300; //проверено:ноль установился // x00:=305-300;
    y2:=Mouse.CursorPos.Y+T.y-165; //проверено:ноль установился   // y00:=170-165;
    Width:=200;
    Height:=20;
    Caption:='Правый Click x2='+ FloatToStr(x2)+ ' y2='+ FloatToStr(y2);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label4.Caption:='левый клик    x1='+ FloatToStr(x1)+ ' y1='+ FloatToStr(y1);
  Label5.Caption:='правый клик   x2='+ FloatToStr(x2)+ ' y2='+ FloatToStr(y2);
  alpha := ArcTan2(x1*y2 - y1*x2, x1*x2 + y1*y2);
  Label3.Caption:='угол alpha      '+FloatToStr(alpha);
 end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   //=========  
    i:=0;
    k:=0;
    m :=0;
    amount1:=0; amount2:=0;amount3:=0;amount4:=0;
end;


procedure TForm1.FormActivate(Sender: TObject);
begin
 Back := TBitmap.Create; // фон
 bitmap := TBitmap.Create; // картинка
 Buf := TBitmap.Create; // буфер

 // загрузить из ресурса фон
 Back.LoadFromResourceName(HInstance,'degrees_0_bmp');
 Form1.Image1.canvas.Draw(0,0,Back);
 end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Back.Free;
 bitmap.Free ;
 Buf.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 Back.LoadFromResourceName(HInstance,'degrees_60_bmp');
 Form1.Image1.canvas.Draw(0,0,Back);
end;

end.
Изображения
Тип файла: jpg повернуть пакетник на РОЗЖИГ.JPG (107.6 Кб, 107 просмотров)
Вложения
Тип файла: rar Project1.rar (302.2 Кб, 8 просмотров)
Репутация: полный "0"
zvygin1964 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Платформа автоматизации "бизнеса" или конфигурирование против кодинга serzh-kz Общие вопросы по программированию, компьютерный форум 0 06.06.2013 05:35
Диагностика уровня закритичности конвективного течения на основе численного решения задачи Релея -Бенара(Делфи) Эльвира91 Помощь студентам 3 15.03.2013 17:27
ListBox или ComboBox, выбор элмента, в Delphi7 Николай ПН Помощь студентам 11 17.11.2010 19:55
Жильцы против Управляющих компаний или когда в нашей стране восторжествует справедливость? vasek123 Свободное общение 18 05.11.2010 06:37
Arcgis проблема с направлением течения реки treder Помощь студентам 0 06.04.2010 23:07