using System;
using System.Numerics;
public class Test
{
static float LinearFormula(float x, Vector2 a, Vector2 b)
{
float slope = (b.Y - a.Y) / (b.X - a.X);
float dx = x - a.X;
float dy = slope * dx;
return dy + a.Y;
}
static float CossineFormula(float x)
{
return Math.Abs(x) - (float) Math.Cos(x * 3);
}
static float MyFormula(float x, Vector2 a, Vector2 b)
{
return CossineFormula(x) - LinearFormula(x, a, b);
}
static Vector2 FindIntersection(Vector2 a, Vector2 b)
{
float x1 = 2;
float x2 = 3;
for (int i = 0; i < 100; i++)
{
float d = (x2 + x1) / 2;
if (d == x1 || d == x2) break;
float v3 = MyFormula(d, a, b);
if (v3 > 0)
{
x2 = d;
}
else
{
x1 = d;
}
}
return new Vector2(x1, CossineFormula(x1));
}
public static void Main()
{
Console.WriteLine(FindIntersection(new Vector2(0, 4), new Vector2(1, 3)));
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTnVtZXJpY3M7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CiAgICBzdGF0aWMgZmxvYXQgTGluZWFyRm9ybXVsYShmbG9hdCB4LCBWZWN0b3IyIGEsIFZlY3RvcjIgYikKICAgIHsKICAgICAgICBmbG9hdCBzbG9wZSA9IChiLlkgLSBhLlkpIC8gKGIuWCAtIGEuWCk7CiAgICAgICAgZmxvYXQgZHggPSB4IC0gYS5YOwogICAgICAgIGZsb2F0IGR5ID0gc2xvcGUgKiBkeDsgCiAgICAgICAgcmV0dXJuIGR5ICsgYS5ZOwogICAgfQoKICAgIHN0YXRpYyBmbG9hdCBDb3NzaW5lRm9ybXVsYShmbG9hdCB4KQogICAgewogICAgICAgIHJldHVybiBNYXRoLkFicyh4KSAtIChmbG9hdCkgTWF0aC5Db3MoeCAqIDMpOwogICAgfQoKICAgIHN0YXRpYyBmbG9hdCBNeUZvcm11bGEoZmxvYXQgeCwgVmVjdG9yMiBhLCBWZWN0b3IyIGIpCiAgICB7CiAgICAgICAgcmV0dXJuIENvc3NpbmVGb3JtdWxhKHgpIC0gTGluZWFyRm9ybXVsYSh4LCBhLCBiKTsKICAgIH0KCiAgICBzdGF0aWMgVmVjdG9yMiBGaW5kSW50ZXJzZWN0aW9uKFZlY3RvcjIgYSwgVmVjdG9yMiBiKQogICAgewogICAgICAgIGZsb2F0IHgxID0gMjsKICAgICAgICBmbG9hdCB4MiA9IDM7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBmbG9hdCBkID0gKHgyICsgeDEpIC8gMjsKICAgICAgICAgICAgaWYgKGQgPT0geDEgfHwgZCA9PSB4MikgYnJlYWs7CiAgICAgICAgICAgIGZsb2F0IHYzID0gTXlGb3JtdWxhKGQsIGEsIGIpOwogICAgICAgICAgICBpZiAodjMgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB4MiA9IGQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB4MSA9IGQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHgxLCBDb3NzaW5lRm9ybXVsYSh4MSkpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgIHsKICAgICAgICBDb25zb2xlLldyaXRlTGluZShGaW5kSW50ZXJzZWN0aW9uKG5ldyBWZWN0b3IyKDAsIDQpLCBuZXcgVmVjdG9yMigxLCAzKSkpOwogICAgfQp9