Eu digitei isto:
myModel.Series.Add(new FunctionSeries((x) => Math.Sqrt(16 - Math.Pow(x, 2)), -4, 4, 0.1, "x^2 + y^2 = 16") { Color = OxyColors.Red });
myModel.Series.Add(new FunctionSeries((x) => - Math.Sqrt(16 - Math.Pow(x, 2)), -4, 4, 0.1) { Color = OxyColors.Red });
E OxyPlot desenhou:
Como corrigi-lo?
Respostas:
2 para resposta № 1Isto é porque
Math.Sqrt(16 - Math.Pow(x, 2))
retorna NaN
para x = 4
Porque 16 - Math.Pow(x, 2)
é calculado com precisão dupla. Isso significa que o resultado é igual a 0 (-3,5527136788005E-14
nesse caso). Uma raiz quadrada negativa como Math.Sqrt(-3,5527136788005E-14)
é indefinido como descrito em MSDN.
Você poderia consertá-lo, proibindo números negativos. Basta tirar o máximo do seu cálculo e 0 como
Math.Sqrt(Math.Max(16 - Math.Pow(x, 2), 0))