Hanzo vs. Genji
“Real life is not like the story our father told us.”
Hanzo just shot an arrow at Genji. Please help him to find out whether that arrow will hit Genji’s
The input contains multiple test cases.
The first line contains an integer T(1≤T≤10000), the number of test cases.
Then T test cases follows. In each test case:
The first line contains a vector S, the initial position of Hanzo’s arrow.
The second line contains two positive integers l and r, which means that Hanzo’s arrow can be recognized as a cylinder with a radius of r and a height of 2l. We always use the position of the centroid of the cylinder to indicate the position of the cylinder. Initially the centroid is at S.
The third line contains a vector V , the initial velocity of Hanzo’s arrow.
The fourth line contains a vector G(|G| > 0), the acceleration of gravity. The position of the centroid of the cylinder moves according to V and G. When the arrow is flying, the line connecting the centers of the two circles’ surfaces of the cylinder is always the tangent line to the trajectory of the centroid at the point of the centroid. (Consider yourself throwing a telegraph pole if you don’t understand the movement of the arrow.)
And the last line contains a vector D, the position of Genji’s head. We consider Genji’s head as a single point. The arrow hits his head when D is on the surface or in the cylinder.
Initially, D has no intersection with the cylinder. It is guaranteed that if the arrow will not hit Genji’s head, the distance between Genji’s head and the arrow will always be no less than 10−6. All the vectors are represented by three numbers which are the three-dimensional cartesion coordinates of that vector.
All the input numbers are integers and their absolute values are bounded by 1000, except for the number of test cases T.
For each test case, output whether the arrow will hit Genji’s head. (Please see the sample input and output for details.)
0 0 0
1 0 0
0 -1 0
10 0 0
0 0 0
1 0 0
0 -1 0
2 -2 0
Case #1: NO
Case #2: YES
- Hanzo vs. Genji