Combine dos segmentos en el mismo círculo si se superponen o se cruzan
Intento combinar dos segmentos si se superponen o se cruzan. Mi pregunta es similar aesta yesta. Sin embargo, lo que quiero es combinar dos segmentos.
public class Segment
{
private readonly double _from;
private readonly double _to;
public Segment(double from, double to)
{
_from = Normalize(from); // 0 <= x < 360
_to = Normalize(to);
}
public bool Inside(double target)
{
if (_from < _to)
return _from <= target && target <= _to;
return _from <= target || target <= _to;
}
}
Estoy tratando de escribir unTryCombine()
.
public bool TryCombine(Segment other, out Segment result)
{
// if not intersect
// return false
// else if overlap
// return true, out larger one
// else if intersect
// return true, out a new one with merged bound
}
Resultado Esperado
var seg1 = new Segment(0, 100);
var seg2 = new Segment(50, 150);
var seg3 = new Segment(110, -100);
var seg4 = new Segment(10, 50);
Segment result;
seg1.TryCombine(seg2, result); // True, result = Segment(0, 150)
seg1.TryCombine(seg3, result); // False
seg1.TryCombine(seg4, result); // True, result = Segment(0, 100)
seg2.TryCombine(seg3, result); // True, result = Segment(260, 150)