Пользовательские настройки Azure B2C UI & lt; div id = & ldquo; api & gt; & lt; / div & gt;

Принимая

  1. E - начальная точка луча,
  2. L - конечная точка луча,
  3. C - центр сферы, которую вы тестируете против
  4. r - радиус этой сферы

Вычисление: d = L - E (вектор направления луча от начала до конца) f = E - C (вектор от центральной сферы до начала луча)

. Тогда пересечение будет найдено через. Plugging: P = E + t * d Это параметрическое уравнение: Px = Ex + tdx Py = Ey + tdy в (x - h) 2 + (y - k) 2 = r2 (h, k) = центр круга.

Примечание. Мы упростили проблему для 2D здесь, решение, которое мы получаем, также применяется в 3D

, чтобы получить:

  1. Развернуть x2 - 2xh + h2 + y2 - 2yk + k2 - r2 = 0
  2. Разъем x = ex + tdx y = ey + tdy (ex + tdx) 2 - 2 (ex + tdx ) h + h2 + (ey + tdy) 2 - 2 (ey + tdy) k + k2 - r2 = 0
  3. Explode ex2 + 2extdx + t2dx2 - 2exh - 2tdxh + h2 + ey2 + 2eytdy + t2dy2 - 2tkk - 2tdyk + k2 - r2 = 0
  4. Группа t2 (dx2 + dy2) + 2t (exdx + eydy - dxh - dyk) + ex2 + ey2 - 2exh - 2eyk + h2 + k2 - r2 = 0
  5. Наконец, t2 (_d * _d) + 2t (_e * _d - _d * _c) + _e * _e - 2 (_e * _c) + _c * _c - r2 = 0 * Где _d есть вектор d и * является точечным произведением. *
  6. И тогда t2 (_d * _d) + 2t (_d * (_e - _c)) + (_e - _c) * (_e - _c) - r2 = 0
  7. Взяв _f = _e - _c t2 (_d * _d) + 2t (_d * _f) + _f * _f - r2 = 0

So получаем: t2 * (d DOT d) + 2t * (f DOT d) + (f DOT f - r2) = 0 Итак, решаем квадратичное уравнение:

float a = d.Dot( d ) ;
float b = 2*f.Dot( d ) ;
float c = f.Dot( f ) - r*r ;

float discriminant = b*b-4*a*c;
if( discriminant < 0 )
{
  // no intersection
}
else
{
  // ray didn't totally miss sphere,
  // so there is a solution to
  // the equation.

  discriminant = sqrt( discriminant );

  // either solution may be on or off the ray so need to test both
  // t1 is always the smaller value, because BOTH discriminant and
  // a are nonnegative.
  float t1 = (-b - discriminant)/(2*a);
  float t2 = (-b + discriminant)/(2*a);

  // 3x HIT cases:
  //          -o->             --|-->  |            |  --|->
  // Impale(t1 hit,t2 hit), Poke(t1 hit,t2>1), ExitWound(t1<0, t2 hit), 

  // 3x MISS cases:
  //       ->  o                     o ->              | -> |
  // FallShort (t1>1,t2>1), Past (t1<0,t2<0), CompletelyInside(t1<0, t2>1)

  if( t1 >= 0 && t1 <= 1 )
  {
    // t1 is the intersection, and it's closer than t2
    // (since t1 uses -b - discriminant)
    // Impale, Poke
    return true ;
  }

  // here t1 didn't intersect so we are either started
  // inside the sphere or completely past it
  if( t2 >= 0 && t2 <= 1 )
  {
    // ExitWound
    return true ;
  }

  // no intn: FallShort, Past, CompletelyInside
  return false ;
}
-1
задан CodeNotFound 13 July 2018 в 15:35
поделиться

1 ответ

В настоящее время вы не можете «внедрить» опыт Azure AD B2C в ваше приложение, использующее вашу стороннюю сторону.

Вместо этого вы можете внедрить или зарегистрировать свой опыт в своем приложении, а затем интегрировать с помощью Azure AD B2C с использованием API-интерфейса Azure AD для создания локальной учетной записи и политики владельца ресурса для проверки учетных данных для локальной учетной записи.

В противном случае вы можете использовать домен {tenant}.b2clogin.com , а не login.microsoftonline.com один, для вашей службы Azure AD B2C, если вы хотите удалить ссылки на Microsoft из своей регистрации и входа в систему потоков.

0
ответ дан Chris Padgett 17 August 2018 в 12:33
поделиться
  • 1
    – Philip Duggan 15 July 2018 в 10:33
  • 2
    Привет @PhilipDuggan Да, я обновил вышеупомянутый ответ с информацией об использовании домена b2clogin. – Chris Padgett 16 July 2018 в 02:09
Другие вопросы по тегам:

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