shunfurh 于 2017.08.28 15:46 提问

Euclid

Description

In one of his notebooks, Euclid gave a complex procedure for solving the following problem. With computers, perhaps there is an easier way.

In a 2D plane, consider a line segment AB, another point C which is not collinear with AB, and a triangle DEF. The goal is to find points G and H such that:

H is on the ray AC (it may be closer to A than C or further away, but angle CAB is the same as angle HAB)
ABGH is a parallelogram (AB is parallel to HG, AH is parallel to BG)
The area of parallelogram ABGH is the same as the area of triangle DEF

Input

There will be several test cases. Each test case will consist of twelve real numbers, with no more than 3 decimal places each, on a single line. Those numbers will represent, in order:

AX AY BX BY CX CY DX DY EX EY FX FY

where point A is (AX,AY), point B is (BX,BY), and so on. Points A, B and C are guaranteed to NOT be collinear. Likewise, D, E and F are also guaranteed to be non-collinear. Every number is guaranteed to be in the range from -1000.0 to 1000.0 inclusive. End of the input will be signified by a line with twelve 0.0's.
Output

For each test case, print a single line with four decimal numbers. These represent points G and H, like this:

GX GY HX HY

where point G is (GX,GY) and point H is (HX,HY). Print all values rounded to 3 decimal places of precision (NOT truncated). Print a single space between numbers. Do not print any blank lines between answers.
Sample Input

0 0 5 0 0 5 3 2 7 2 0 4
1.3 2.6 12.1 4.5 8.1 13.7 2.2 0.1 9.8 6.6 1.9 6.7
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
Sample Output

5.000 0.800 0.000 0.800
13.756 7.204 2.956 5.304

1个回答

caozhy      2017.09.11 23:43

Euclid开源源码解析

求最大公约数的欧几里德算法(Euclids Algorithm)算法主要基于两条规则：1.If b|a then gcd(a, b) = b.2.If a = bt + r, for integers t and r, then gcd(a, b) = gcd(b, r).定理gcd(a,b) = gcd(b,a mod b)例如：Let a = 2322, b = 654. 2322 =
HDU1525 Euclid's Game (找规律博弈)
Euclid's Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3434    Accepted Submission(s): 1599 Problem Description Two players,
Intel Euclid （一）
Intel Euclid
Euclid空间上的点集划分

uva 10368 - Euclid's Game(博弈)

Euclid 算法

euclid's algorithm
I have known it since when I was in the primary school. However, I did not get its underlying insight until now, although it is simple. First, a brief description of the algorithm: Input, (a,b) Outpu
Euclid算法
1、编写递归函数求两个正整数a和b的最大公约数（GCD，Greatest Common Divisor），使用Euclid算法：如果a除以b能整除，则最大公约数是b。否则，最大公约数等于b和a%b的最大公约数#includeint gcd(int a,int b){   if(a%b==0)  {if(b>0)     return b;    else