На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> подскажите формулу как найти угол между двумя отрезками , ...
    задано 2 отрезка (х1,у1)-(х2,у2) и (х2,у2)-(х3,у3)
    у этих отрезков есть 1 общая точка.
    и как найти угол?
      И при чем тут Паскаль? Тебе формула нужна? Тогда переезжаем в Алгоритмы...
        сор :D
          Общая точка является концом отрезка, или может быть где угодно?
            не работает(
            ИСХОДНИК

            должно в Form1.Caption писать размер угла
            ExpandedWrap disabled
              unit Unit1;
               
              interface
               
              uses
                Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                Dialogs, Math, ExtCtrls;
               
              type
                TForm1 = class(TForm)
                  Timer1: TTimer;
                  procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
                    Y: Integer);
                  procedure Timer1Timer(Sender: TObject);
                private
                  { Private declarations }
                public
                  { Public declarations }
                end;
               
              const
                x2=200;
                y2=200;
                x1=300;
                y1=200;
              var
                Form1: TForm1;
                 a : single;
              implementation
               
               
              {$R *.dfm}
               
              procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
                Y: Integer);
              var
                xa,ya,xb,yb : longint;
              begin
                xa:=x1-x2;
                ya:=y1-y2;
                xb:=x-x2;
                yb:=y-y2;
                a:=arccos((xa*xb+ya*yb)/sqrt((sqr(xa)+sqr(ya))*(sqr(xb)+sqr(yb))));
                Form1.Caption:=FloatToStr(a);
              end;
               
              procedure TForm1.Timer1Timer(Sender: TObject);
              begin
              Canvas.Ellipse(100,100,300,300);  
                Canvas.MoveTo(200,200);
                Canvas.LineTo(300,200);
                Timer1.Enabled:=false;  
              end;
               
              end.
            Сообщение отредактировано: v1m -
              я там выложил свой исходник посмотри плиз...
                Всё правильно, должно работать, осталось угол в градусы перевести для красоты.
                  А я вижу только одну ситуацию возможного обрушения :)
                  Все же подозреваю, что "не работает" связано или с тем, что автор ожидал увидеть угол в градусах, или что автор вообще хотел получить угол в диапазоне от 0 до 360 градусов, а не 0-180 градусов.
                  Впору писать алгоритм расшифровывания мыслей авторов :D
                    Вот еще вариант

                    dx1 = x1 - x2
                    dy1 = y1 - y2
                    dx2 = x3 - x2
                    dy2 = y3 - y2

                    a = dx1*dy2 - dy1*dx2
                    b = dx1*dx2 + dy1*dy2

                    θ = arctan (a/b)
                    или лучше (при наличии нужной функции)
                    θ = atan2 (a, b)
                    Второй вариант дает угол в диапазоне ±π

                    Со знаком только надо разобраться
                      Цитата v1m @
                      задано 2 отрезка (х1,у1)-(х2,у2) и (х2,у2)-(х3,у3)
                      у этих отрезков есть 1 общая точка.
                      и как найти угол?

                      один из вариантов найти проходящие через отрезки прямые и найти угол между ними ... 8-)
                        сор что не написал что не работает))))
                        я понял как перевести это в градусы :rolleyes:
                        ток у меня максимально 180 а не 360
                        перевожу так
                        Градусы = Радианы * 180 / pi
                          не ты меня не так понял ну это уже неважно)))
                          я уже сам все решил)))
                          спс за формулу))) :D
                          Сообщение отредактировано: v1m -
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0387 ]   [ 15 queries used ]   [ Generated: 25.06.25, 05:38 GMT ]