17#ifndef MATHUTILS_INCLUDE_MATHUTILS_DETAIL_INTERVALXY_H_
18#define MATHUTILS_INCLUDE_MATHUTILS_DETAIL_INTERVALXY_H_
23#ifndef GPUCA_GPUCODE_DEVICE
65#ifndef GPUCA_GPUCODE_DEVICE
66 std::tuple<T, T>
eval(
T t)
const;
124GPUdi()
T& IntervalXY<
T>::getX0()
141GPUdi()
T IntervalXY<
T>::getY1()
const
146GPUdi()
T IntervalXY<
T>::getDX()
const
151GPUdi()
T IntervalXY<
T>::getDY()
const
157GPUdi()
T& IntervalXY<
T>::getDX()
162GPUdi()
T& IntervalXY<
T>::getDY()
208#ifndef GPUCA_GPUCODE_DEVICE
212 return {mX + t * mDx, mY + t * mDY};
227 c = mX * mDY - mY * mDx;
231 }
else if (fabs(mDx) > fabs(mDY)) {
243GPUdi() bool IntervalXY<
T>::seenByCircle(
const CircleXY<
T>& circle,
T eps)
const
245 T dx0 = mX - circle.xC;
246 T dy0 = mY - circle.yC;
250 const T dxeps = eps * mDx, dyeps = eps * mDY;
257 const T d02 = dx0 * dx0 + dy0 * dy0;
258 const T d12 = dx1 * dx1 + dy1 * dy1;
259 const T rC2 = circle.rC * circle.rC;
261 return (d02 - rC2) * (d12 - rC2) < 0;
264GPUdi() bool IntervalXY<
T>::circleCrossParam(
const CircleXY<
T>& circle,
T& t)
const
266 const T dx = mX - circle.xC;
267 const T dy = mY - circle.yC;
268 const T del2I = 1.f / (mDx * mDx + mDY * mDY);
269 const T b = (
dx * mDx +
dy * mDY) * del2I;
270 const T c = del2I * (
dx *
dx +
dy *
dy - circle.rC * circle.rC);
275 det = gpu::CAMath::Sqrt(det);
276 const T t0 = -
b - det;
277 const T t1 = -
b + det;
279 t = (gpu::CAMath::Abs(
t0 - 0.5f) < gpu::CAMath::Abs(
t1 - 0.5f)) ?
t0 :
t1;
299 constexpr float eps = 1.e-9f;
302 const T det = -mDx *
other.getY0() + mDY *
other.getX0();
303 if (gpu::CAMath::Abs(det) < eps) {
T value_t
2D interval in lab frame defined by its one edge and signed projection lengths on X,...
std::tuple< T, T > eval(T t) const
GLuint GLfloat GLfloat GLfloat GLfloat y1
GLuint GLfloat GLfloat GLfloat x1
GLboolean GLboolean GLboolean b
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat t0
GLboolean GLboolean GLboolean GLboolean a
GLuint GLfloat GLfloat y0
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat t1
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
VectorOfTObjectPtrs other