Принимая
Вычисление: 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
blockquote>, чтобы получить:
- Развернуть x2 - 2xh + h2 + y2 - 2yk + k2 - r2 = 0
- Разъем x = ex + tdx y = ey + tdy (ex + tdx) 2 - 2 (ex + tdx ) h + h2 + (ey + tdy) 2 - 2 (ey + tdy) k + k2 - r2 = 0
- Explode ex2 + 2extdx + t2dx2 - 2exh - 2tdxh + h2 + ey2 + 2eytdy + t2dy2 - 2tkk - 2tdyk + k2 - r2 = 0
- Группа t2 (dx2 + dy2) + 2t (exdx + eydy - dxh - dyk) + ex2 + ey2 - 2exh - 2eyk + h2 + k2 - r2 = 0
- Наконец, t2 (_d * _d) + 2t (_e * _d - _d * _c) + _e * _e - 2 (_e * _c) + _c * _c - r2 = 0 * Где _d есть вектор d и * является точечным произведением. *
- И тогда t2 (_d * _d) + 2t (_d * (_e - _c)) + (_e - _c) * (_e - _c) - r2 = 0
- Взяв _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 ; }
В настоящее время вы не можете «внедрить» опыт Azure AD B2C в ваше приложение, использующее вашу стороннюю сторону.
Вместо этого вы можете внедрить или зарегистрировать свой опыт в своем приложении, а затем интегрировать с помощью Azure AD B2C с использованием API-интерфейса Azure AD для создания локальной учетной записи и политики владельца ресурса для проверки учетных данных для локальной учетной записи.
В противном случае вы можете использовать домен {tenant}.b2clogin.com
, а не login.microsoftonline.com
один, для вашей службы Azure AD B2C, если вы хотите удалить ссылки на Microsoft из своей регистрации и входа в систему потоков.