Пресечна линия срещу квадратичен триъгълник на Безие

Опитвам се да намеря пресечната точка между линеен сегмент и квадратичен безиеров триъгълник за моя OpenCL raytracer в реално време.

Този въпрос Откриване и намиране на пресечен лъч срещу кубичен триъгълник на Безие говори за намирането на точка на сблъсък между лъч и кубичен безиеров триъгълник и основните препоръки са да опитате подразделяне или тензорен продукт безиерови кръпки.

Четох на няколко места, че когато тествате линеен сегмент срещу квадратен безиеров триъгълник, в крайна сметка просто трябва да решите квадратно уравнение, но не намерих информация какво всъщност представлява това уравнение и започвам да чудя се дали е вярно. Опитите ми да го намеря също не успяха досега :P

Някой знае ли дали това е вярно или как да го решим, освен да използваме безиерови кръпки за подразделение или тензорен продукт?

Ето уравнението за квадратен безиеров триъгълник:

AS^2 + 2*DST + 2*ESU + B*T^2 + 2*FTU + C*U^2

Където S,T,U са параметрите на триъгълника. Можете да замените U с (1-S-T), тъй като те са барицентрични координати.

A,B,C са ъглите на триъгълника, а D,E,F са контролните точки по ръбовете.

Супер объркан от този!


person Alan Wolfe    schedule 25.03.2014    source източник
comment
Тъй като това се отнася до намирането на формула, а не до C++ алгоритъма на същата, вероятно е по-добре да се зададе на math.stackexchange.com?   -  person Jongware    schedule 26.03.2014


Отговори (1)


Линеен сегмент има параметрично уравнение P = P0+(P1-P0)*v=P0+d*v, където v е параметър [0..1] За да намерите пресичане с груба сила, трябва да решите система от три квадратни уравнения като

x0+dx*v=AxS^2 + 2*Dx*S*T + 2*Ex*S*U + Bx*T^2 + 2*Fx*T*U + Cx*U^2

Тази система има 8 възможни решения и пресичане(ия) съществува само ако получените v,s,t лежат в диапазон 0..1 едновременно. Не е лесно да се реши тази система (възможни подходи - базис на Грьобнер, числени методи, и процесът на решение може да бъде числено нестабилен). Ето защо понякога се препоръчва методът на подразделяне.

person MBo    schedule 26.03.2014
comment
О, това е жалко. Останах с впечатлението, че тъй като е квадратно, ще бъде по-ясно. Ще разгледам повече подходите, които споменахте. Благодаря ви много за информацията. - person Alan Wolfe; 27.03.2014