у меня вопрос. как определить что отрезок прямой. звучит тупо. И вопрос 5 класса наверн. Я знаю что можно Atan2 найти угол отрезка.
Мне нужно, что бы алгоритм брал только диагонали, а не прямые отрезки (углы 0,90,180,270, 360 не должен брать). Пробовал и радианы и градусы.
function AngleVector takes real x1, real y1, real x2, real y2 returns real
    return Atan2(y2 - y1, x2 - x1)
endfunction
 set Angle = AngleVector(Ax, Ay, Vx2[F1], Vy2[F1])* bj_RADTODEG
            
//0 = 0 или 360; 3.142 = 180; 1.571 = 90; -1.571 = 270
 if (Angle != 0) or (Angle != 360.) or (Angle != -360.) or (Angle != 180.) or (Angle != -180.) or (Angle != 90.) or (Angle != -90.) then
	//показать дебагом угол
else
	//вывести дебаг ошибку
endif
У меня почему-то получается угол отрицательный -90. А по условию проходит. это тупо.
Благо только сейчас заметил что не работает проверка, как только написал отладку. Видать что-то другое к счастью не допустило отрезок. У меня там еще несколько проверок.
Мб надо сравнивать координаты? типа x1 == x2 или y1 == y2 значит угол прямой?

Принятый ответ

Равно в варике округляет, а вот неравно - нет. У тебя и выводит 90.000, потому что R2S округляет до 3-го знака, а на самом деле там было что-то вроде 89.999999. 90 != 89.999999 в варике, потому условие прошло. Хочешь, чтобы не прошло, используй not (90 == angle). Тогда 89.999999 округлится до 90 и условие не пройдёт.

Либо используй то, что показал Скорп, тоже подойдёт.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
37
3 года назад
Отредактирован ScorpioT1000
0
втф, а скинь тот же код по методу PT153, который работает, мне самому уже интересно
2
27
3 года назад
Отредактирован MpW
2
вариант 1 (рабочий)
if not((Ax == Vx2[F1]) or (Ay == Vy2[F1])) then
endif
вариант 2 (рабочий)
if not((Angle == 0) or (Angle == 360.) or (Angle == -360.) or (Angle == 180.) or (Angle == -180.) or (Angle == 90.) or (Angle == -90.)) then 
endif
карта <= функция Trig_triigger_DU_2 в шапке. работает хорошо и норм щас
Загруженные файлы
1
28
3 года назад
Отредактирован PT153
1
до чего "==" округляет
Вроде до третьего знака. Сурс:
The only thing we changed is == to not != which should be logically equivalent, but in fact are not in Jass. It seems Blizzard wanted to make things "easier" for people when working with reals and therefore implemented the == for reals with some epsilon. However, they only did so for this operator, not for the other comparison operators like !=. This property was first reported by masda70 and is quantified here. I.e. the epsilon used by == must be somewhere around 0.001.
0
37
3 года назад
0
PT153, тем не менее явное сравнение с эпсилономту автора не работает даже с 0.01
Этот комментарий удален
0
28
3 года назад
0
ScorpioT1000, потому что он неправильно закодил.
Вот тесты, там видно, что сравнение по эпсилону работает как надо.
Загруженные файлы
0
32
3 года назад
0
А почему не сделать на коллинеарных векторах?
0
27
3 года назад
Отредактирован MpW
0
ScorpioT1000:
PT153, тем не менее явное сравнение с эпсилономту автора не работает даже с 0.01
Прости. Обманул. Работает. Просто запутался, мне надо было ставить "не равно", а с этим эпсилоном поставил "равно". надо not (a-b < 0.001). я сделал (a-b < 0.001) и выключил дебаг на ложь.
Bergi_Bear, но мне это не нужно. достаточно просто координаты сравнить.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.