powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Кастомное округление
25 сообщений из 27, страница 1 из 2
Кастомное округление
    #38895418
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вращение по кругу - 360 градусов. Хочу, чтобы любые входящие числа округлялись до ближайших из следующего ряда: 0, 90, 180, 270, 360. Простой способ из кучи if я знаю. Ищу вариант поэлегантнее, чтоли. Приветствуются всякие лямбды, LINQ, дженерики и т. д.

Спасибо.
...
Рейтинг: 0 / 0
Кастомное округление
    #38895440
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А тригонометрия не приветствуется? Это ее область.

Я, к сожалению, ее почти совсем забыл.
...
Рейтинг: 0 / 0
Кастомное округление
    #38895444
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако куча if'ов будет работать быстрее.
...
Рейтинг: 0 / 0
Кастомное округление
    #38895448
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Приветствуются всякие лямбды, LINQ, дженерики и т. д.

простая арифетика - не подходит?
...
Рейтинг: 0 / 0
Кастомное округление
    #38895456
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Кастомное округление
    #38895458
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все упороты

Код: c#
1.
((long)Math.Round(d+45)/90)*90 % 360
...
Рейтинг: 0 / 0
Кастомное округление
    #38895468
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилвсе упороты

Код: c#
1.
((long)Math.Round(d+45)/90)*90 % 360


Я там на стеке обновил - глянь, точно работает? А то в случае 45 не так, как надо работает.
...
Рейтинг: 0 / 0
Кастомное округление
    #38895470
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Приветствуются всякие лямбды, LINQ, дженерики и т. д.Конечно, как же без них. Пусть МСУ загнётся от ностальгии по светлому прошлому.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Round(12));
            Console.WriteLine(Round(92));
            Console.WriteLine(Round(183));
            Console.WriteLine(Round(274));
            Console.WriteLine(Round(350));
        }

        static int Round(int value)
        {
            var edges = new[] { 0, 90, 180, 270, 360 };

            var q =
                from e in edges
                let d = Math.Abs(value - e)
                orderby d
                select e;

            return q.First();
        }
    }
...
Рейтинг: 0 / 0
Кастомное округление
    #38895472
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНемоКэп42Приветствуются всякие лямбды, LINQ, дженерики и т. д.Конечно, как же без них. Пусть МСУ загнётся от ностальгии по светлому прошлому.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Round(12));
            Console.WriteLine(Round(92));
            Console.WriteLine(Round(183));
            Console.WriteLine(Round(274));
            Console.WriteLine(Round(350));
        }

        static int Round(int value)
        {
            var edges = new[] { 0, 90, 180, 270, 360 };

            var q =
                from e in edges
                let d = Math.Abs(value - e)
                orderby d
                select e;

            return q.First();
        }
    }


Не, надо с плавающей точкой - в DirectX всё как минимум на флоатах. См. пример на Стеке.
...
Рейтинг: 0 / 0
Кастомное округление
    #38895475
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Не, надо с плавающей точкой.Ну просто заменить int на double. Не вижу разницы.
...
Рейтинг: 0 / 0
Кастомное округление
    #38895476
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНемоКэп42Не, надо с плавающей точкой.Ну просто заменить int на double. Не вижу разницы.
45 проверь.
...
Рейтинг: 0 / 0
Кастомное округление
    #38895485
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Алексей Кпропущено...
Ну просто заменить int на double. Не вижу разницы.
45 проверь.0

Не правильно?
...
Рейтинг: 0 / 0
Кастомное округление
    #38895493
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНемоКэп42пропущено...

45 проверь.0

Не правильно?
Да хрен с ним, и так сойдёт надо 90. Короче, надо "в бОльшую сторону".
...
Рейтинг: 0 / 0
Кастомное округление
    #38895494
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42А то в случае 45 не так, как надо работает.
а как надо в "серединках" ?

и почему в градусах, а не в радианах?
...
Рейтинг: 0 / 0
Кастомное округление
    #38895504
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилНемоКэп42А то в случае 45 не так, как надо работает.
и почему в градусах, а не в радианах?
Мне так привычнее. И юзерам тоже.
...
Рейтинг: 0 / 0
Кастомное округление
    #38895506
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропили почему в градусах, а не в радианах?
А какая разница? Алгоритм принципиально другой можно написать?
...
Рейтинг: 0 / 0
Кастомное округление
    #38895510
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42,

юзерам показывай хоть в делениях угломера



НемоКэп42Я там на стеке обновил - глянь, точно работает?
оно не скомпилится

PS то что я написал - условиям удовлетворяет
...
Рейтинг: 0 / 0
Кастомное округление
    #38895517
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42А какая разница? Алгоритм принципиально другой можно написать?
алгоритмы - те же,
тригонометрические функции в радианах работают, округление - не единственное вычисление ведь ?
...
Рейтинг: 0 / 0
Кастомное округление
    #38895526
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилНемоКэп42А какая разница? Алгоритм принципиально другой можно написать?
алгоритмы - те же,
тригонометрические функции в радианах работают, округление - не единственное вычисление ведь ?
У меня хранятся в градусах. А когда передаю в матрицу (мировую, вида и т. п.), то перевожу в радианы.

ИзопропилНемоКэп42Я там на стеке обновил - глянь, точно работает?
оно не скомпилится
Всё компилится.
...
Рейтинг: 0 / 0
Кастомное округление
    #38895548
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42У меня хранятся в градусах. А когда передаю в матрицу (мировую, вида и т. п.), то перевожу в радианы.
странно это
...
Рейтинг: 0 / 0
Кастомное округление
    #38895564
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилНемоКэп42У меня хранятся в градусах. А когда передаю в матрицу (мировую, вида и т. п.), то перевожу в радианы.
странно это
Потом поправлю, если что. Мне сложнее перестроить мышление на радианы.
...
Рейтинг: 0 / 0
Кастомное округление
    #38895587
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42,

что в этом сложного? 2 * Pi это = 360 градусов.
Как я понимаю, вам надо окружность разбить на N промежутков.
соответственно вы берёте 2Pi и делите на соответствующее количество промежутков.

получаете размер 1 промежуток.
в цикле перебираете все промежутку, вычисляете начало и конец (min, max значения для промежутка)
проверяете, входит ли значение в текущий промежуток, если входит возвращаем либо Min, либо Max, либо Avg этого промежутка.
Для ускорения процесса, лучше сразу создать массив и перебирать уже его.
...
Рейтинг: 0 / 0
Кастомное округление
    #38895592
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesв цикле перебираете
ещё один упоротый...
...
Рейтинг: 0 / 0
Кастомное округление
    #38895604
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилRoman Mejtesв цикле перебираете
ещё один упоротый...
Да намана! Всё ж получше кучки ифов.
...
Рейтинг: 0 / 0
Кастомное округление
    #38895694
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42, а вы в своё кодило не пробовали MidpointRounding.AwayFromZero добавить?
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Кастомное округление
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]