Muszę napisać algorytm C# wyznaczający punkt przecięcia dwóch okręgów.
Zrobiłem to tak jak niżej – niestety nie dla każdej kombinacji weryfikacja czyli ponowne wyliczenie promieni daje poprawny wynik.
Algorytm C# oparłem na opracowaniu ze strony:
Kod: Zaznacz cały
double r = 3;
double R = 7;
double x1 = 1;
double y1 = 1;
double x2 = 8;
double y2 = 1;
double dl = Math.Sqrt(Math.Pow(x2 - x1, 2) + Math.Pow(y2 - y1, 2));
Console.WriteLine(dl);
double cosA = (dl*dl+r*r-R*R) / (2*dl*r);
double sinA = Math.Sqrt(1 - Math.Pow(cosA,2));
double vpx = (x1 - x2)*r/dl;
double vpy = (y1 - y2)*r/dl;
//
double V1x = vpx * cosA - vpy * sinA + x1;
double V1y = vpx * sinA + vpy * cosA + y1;
Console.WriteLine("V1x {0}:", V1x);
Console.WriteLine("V1y {0}:", V1y);
Console.WriteLine("sprawdzam:");
Console.WriteLine("r {0}:", Math.Sqrt(Math.Pow(vpx-x1,2) + Math.Pow(vpy-y1,2)));
Console.WriteLine("R {0}:", Math.Sqrt(Math.Pow(x2-vpx,2) + Math.Pow(y2-vpy,2)));
Console.ReadKey();
Piotr