Определить высшую точку столкновения сферы и прямоугольников
У меня есть 2D-матрица высот, представляющая собой "пол".
Пол состоит из одинаковых по размеру, выровненных по оси прямоугольников, параллельных плоскости XY, на разной высоте (z). Я представляю пол с помощью 2D-матрицы (Matrix[x, y]), такой, что z каждого реактанга является элементом матрицы в точке x, y. Верхний левый угол прямоугольника определяется x и y. Нижний правый угол прямоугольника определяется x + cellWidth и y + cellHeight.
У меня тоже есть сфера. Мне нужно определить первую точку (как центр сферы), в которой сфера сталкивается с любым из прямоугольников, когда сфера опускается на пол. Сфера всегда будет опускаться в центр прямоугольника.
Доступ к матричным элементам можно получить с помощью Matrix[x,y], которая вернет высоту прямоугольника в точке x, y в виде десятичной дроби.
GetFootprintFromTopView-это просто для того, чтобы я мог закрепиться на затронутом "пространстве пола" вместо того, чтобы проверять все прямоугольники пола.
private decimal sphereDiameter; decimal DetermineCollisionHeightAt(int x, int y, Matrix heights, decimal cellWidth, decimal cellHeight) { var footprintMatrix = GetFootprintFromTopView(); // ??? } Matrix GetFootprintFromTopViewAt(int x, int y, Matrix heights, decimal cellWidth, decimal cellLength) { var heightMapLeft = 0; var heightMapRight = heights.Width - 1; var heightMapTop = 0; var heightMapBottom = heights.Length - 1; var diameter = sphereDiameter; var radius = diameter / 2; var centerX = (x * cellWidth) + (cellWidth / 2); var centerY = (y * cellLength) + (cellLength / 2); Matrix subMatrixToReturn = null; // ??? return subMatrixToReturn; }
Что я уже пробовал:
Проблема в том, что я понятия не имею, как к этому подойти. Вышеприведенные методы - это то, что у меня есть до сих пор.
CPallini
Я вас не понимаю: у Пола есть высота, это хорошо. Вот сфера падает, это хорошо. Какова роль кубиков?
AndreTrollip
Извини, что я должен был выразиться яснее. Позвольте мне устранить кубическую путаницу. Пол состоит из прямоугольников одинакового размера, параллельных плоскости XY, на разной высоте (z). Я представляю пол с помощью 2D-матрицы (Matrix[x, y]), такой, что z каждого реактанга является элементом в точке x, y. Верхний левый угол прямоугольника определяется x - (cellWidth / 2) и y - (cellHeight / 2). Нижний правый угол прямоугольника определяется x + (cellwidth / 2) и y + (cellHeight / 2)
Patrice T
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
AndreTrollip
Сделано. Спасибо.
Patrice T
Это не проблема программирования, это базовая геометрия.
В чем ваша проблема с вычислением расстояния между трехмерной точкой и сферой ?
Simon_Whale
Лично я думаю, что в этом деле все еще не хватает многих деталей, поскольку мы можем сделать множество предположений. Как работает сфера? растет ли она? она движется? если он движется, есть ли закономерность?
AndreTrollip
На самом деле ppolymorphe был на 100% прав. Я разместил свой вопрос на math. stackexchange и получил решение в течение нескольких минут. Программирование было легким, как только я понял математику.