@FungusWarrior
Я знаю, что ничего не знаю

Принадлежность точки октанту?

Стоит задача - написать программу для определения принадлежности точки октанту. Октант - это четверть в трехмерном пространстве. Все довольно просто если бы не нужно было написать программу которая будет это делать с помощью всего трех атомарных условий(Условие над которым невозможно произвести дальнейшуюю декомпозицию. Тоесть условие которое больше нельзя разложить. Без логических операторов. ).
Максимум получилось сделать с помощью семи.
if (x>0)
   if (y>0)
      if (z>0)
         k = 1;
      else
         k = 8;
   else if (z>0)
       k = 4;
       else
       k = 5;
 else if (y>0)
      if (z>0)
          k = 2;
      else
          k = 7;
    else if (z>0)
          k = 3;
          else
          k = 6;
  • Вопрос задан
  • 381 просмотр
Пригласить эксперта
Ответы на вопрос 3
dom1n1k
@dom1n1k
Первое что приходит в голову (это не готовый к использованию код, а просто демонстрация идеи):
k = 0;
k |= x > 0 ? 0x1 : 0;
k |= y > 0 ? 0x2 : 0;
k |= z > 0 ? 0x4 : 0;
Ответ написан
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
Что нибудь вроде
k=1
if (y<0)
	k = 2;
if (z<0)
	k = 5 - k;
if (x<o)
	k = k + 4;

нумерация октантов с единицы
Ответ написан
@Sumor
Примерно так:
k = (((uint)x&0x80000000) >> 31) | (((uint)y&0x80000000) >> 30) | (((uint)y&0x80000000) >> 29);

Нумерация не совпадает с предложенной по ссылке, но точки из одного октанта будут сопоставлены одному числу от 0 до 7.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы