I know how to determine where a ray hit a quad but I don't know how to determine the orientation at the hit position.
ArCore describes the HitResult pose for a plane as:
HitResult.getHitPose()
Returns the pose of the intersection between a ray and detected real-world geometry. The position is the location in space where the ray intersected the geometry. The orientation is a best effort to face the user's device, and its exact definition differs depending on the Trackable that was hit.
Plane: X+ is perpendicular to the cast ray and parallel to the plane, Y+ points along the plane normal (up, for HORIZONTAL_UPWARD_FACING planes), and Z+ is parallel to the plane, pointing roughly toward the user's device.
Note that a Pose is a position (Vector3) and an orientation (quaternion).
I'm currently using DirectX::TriangleTests::Intersects to calculate the position where the ray hits the quad. Calculating Y+ is easy by using the plane's normal but I don't know how to calculate X+ and Z+.