Как я могу сделать свою математику более стабильной для больших радиусов круга?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу сделать свою математику более стабильной для больших радиусов круга?

Сообщение Anonymous »

У меня есть функция, которая проверяет, перекрываются ли два круговых кольца, и отлично работает для маленьких кругов:

Код: Выделить всё

    public static bool Overlaps(in Circle circle1, in float annulus1, in Circle circle2, in float annulus2)
{
double h1 = annulus1 * 0.5f;
double h2 = annulus2 * 0.5f;

var innerRadius1 = circle1.Radius - h1;
var outerRadius1 = circle1.Radius + h1;

var innerRadius2 = circle2.Radius - h2;
var outerRadius2 = circle2.Radius + h2;

var d = math.distance(circle1.Origin, circle2.Origin);
return d < outerRadius1 + outerRadius2 &&
d > innerRadius1 - outerRadius2 &&
d > innerRadius2 - outerRadius1;
}
Изображение

Однако проблема заключается в очень больших кругах, например, они не обнаруживают перекрытия:
[img]https://i.sstatic. сеть/AJJ4QRS8.png[/img]

Этот элемент отображается зеленым цветом, что указывает на отсутствие перекрытия. Входные данные:

Код: Выделить всё

Circle 1:
Origin: (2502,3.09)
Radius: 2500
Annulus: 1

Circle 2:
Origin: (6.33,2.39)
Radius: 2.43
Annulus: 1
Причина, по которой мне нужна поддержка очень больших кругов, заключается в том, что я на самом деле использую дуги и использую тест на перекрытие кругового кольца, чтобы раньше отказаться от выполнения более тяжелых вычислений для расчетов пересечений дуг.
Как сделать это более стабильным? Я попробовал использовать double, но мне все равно не удалось правильно обнаружить перекрытие.

Подробнее здесь: https://stackoverflow.com/questions/793 ... rcle-radii
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»