1. Акция на весь декабрь! Получай оплату х2 за уникальные статьи, объемом от 200 слов, если в заголовке темы и теле статьи присутствует слово Python
    Скрыть объявление

Получение угла прямой относительно Ох

Тема в разделе "Delphi - FAQ", создана пользователем Dock1100, 30 апр 2010.

  1. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Всё время выбивает ошибку(надо найти угол наклона прямой относительно Ох)
    Код (Text):
    function getanglefromline(p1,p2:Tpoint):integer;
    var s:string;
    angle:extended;
    begin
    angle:=0;
    if (p1.X=0)or(p2.X=0) then exit;
    if p1.X<>p2.X then
    begin
    angle:=ArcCos((sqrt(sqr(p1.X-p2.X)+sqr(p1.Y-p2.Y)))/(p1.X- p2.X)); //тут выдает ошибку Invalid floating poin operation
    //че я тут написал:      акосинус( корень арифметический(длина отрезка)/катет )
    angle:=RadToDeg(angle);
    end;
    getanglefromline:=round(angle);
    end;
     
  2. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    МБ поставить double вместо екстендед?
     
  3. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    тоже самое.
     
  4. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    а какой тип надо передавать вовнутрь арккосинуса? что в справке написано?
     
  5. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    function ArcCos ( const Number : Extended ) : Extended;

    Добавлено: Судя по всему глюк именно с ArcCos, я подставлял любые числа(81/70) е ему всеравно не нравилось, а если подставить 0.5 то все норм.
     
  6. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    Блин, волбщем так. Разбей все по действиям отдельно. Т.е. каждое действие в свою переменную, и посмотрим на какой операции оно упадет..
     
  7. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Вот тут все нормально работает
    Сделано для получения с канваса(оси Ох и Оу другие)
    Код (Text):
    function getanglefromline(p1,p2:Tpoint):integer;
    var g,k,angle:single;
    begin
    angle:=0;
    k:=0;
    k:=0;
    g:=sqrt(sqr(p1.X-p2.X)+sqr(p2.Y-p1.Y));
    k:=p2.X-p1.X;
    if k=0 then k:=1;

    angle:=k/g;
    angle:= trunc(angle*1000)/1000;
    angle:=ArcCos(angle);
    angle:=radtodeg(angle);
    if p2.Y>p1.Y then angle:=-angle;
    getanglefromline:=round(angle);
    end;

    Добавлено: Просто была допущена небольшая ошибочка(надо катет делить на гипотенузу а не наоборот)
     
  8. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    лабуда какая-то)
     
Загрузка...

Поделиться этой страницей