2010-12-16 3 views
0

I имеет значение для следующего переменных ::C# Draw идеального шара от центра (х, у, г) в удаленном от центра (х, у, г) в 3D-пространстве сетки

x0, y0, z0 = Coords первого выбора (предназначено, чтобы быть центром сферы)

x1, y1, z1 = Coords второго выбора (предназначенные, чтобы быть самой наружной точкой для сферы)

ishollow = логическое значение, указывающее, если в сфере должен быть полым

Результат должен привлечь, как можно лучше, идеальную сферу. Ниже приведен пример:

  • 3D пространство 100x100x100
  • точка 50,50,50 выбран первый (т.е. x0 = 50; у0 = 50, г0 = 50)
  • точка 76,67,84 выбирается вторым (т.е. x1 = 76; y1 = 67, z1 = 84)
  • шар нарисован с первой точкой как центральной и второй точкой как наибольшее расстояние любой точки сферы от центра
  • шар должен быть состоящий из точек, нанесенных с помощью функции markpointt (x, y, z, полый знак)
  • sphe re должно быть полым, если ishollow = true. чтобы сделать его долбить мне нужно указать, если hollowmark верно, если так дело все еще должен быть помещен, но она перекрывает любые существующие точки с черной точкой

Я не был уверен, с чего начать, вы можете указать мне в направлении идентификации математических функций для кодирования такого процесса? Благодарим вас за помощь.

+0

Кажется, что вы ожидаете, что код написан для вас, а не поможет вам с кодом, который вы написали. – 2010-12-16 15:37:34

+0

Я больше искал математику за этим, поэтому я не включил никаких других ссылок на код, кроме как в заголовке вопроса. Я уверен, что есть имя для вычислений, которые мне нужно сделать, но, не зная правильных терминов, я испытывал недостаток в относительных результатах поисковой системы. Просто нужно знать направление, и я могу идти по пути. – SystemX17 2010-12-16 15:43:59

ответ

1

Первое количество, которое вы должны вычислить, - это радиус сферы. Это просто, используя ваши обозначения radius = sqrt((x1-x0)^2+(y1-yo)^2+(z1-z0)^2).

Далее, чтобы «покрасить» всю сферу, вы можете просто прокрутить каждый воксель в своем пространстве 100 x 100 x 100 и проверить, находится ли он в пределах сферы, окрашивая его соответствующим образом. Существует много способов сделать эту операцию более эффективной, например, вы можете сначала вычислить ограничительную рамку для сферы и только перебрать точки в этом поле. Вы можете делать все ваши вычисления в одном октанте пространства, а затем использовать отражение в цвете в других октантах.

Нанесение полого шара будет более сложным, радиус вашей сферы, в общем, будет действительным числом, а не целым числом, поэтому не будет хорошо устроена одна воксельная толстая оболочка вокселей вокруг центр. Вместо этого наивный алгоритм (тест, что воксел точно на указанном расстоянии от центра сферы) может привести к тому, что вокселы не будут включены в оболочку. Вы должны будете разрешить некоторый допуск в своих тестах независимо от того, находится ли воксель в оболочке, внутри нее или за ее пределами. Я ожидаю, что вы найдете довольно сложным определение толерантности, чтобы у вас никогда не было толпы двух вокселей в любой точке, одновременно обладая нулевыми вокселями, толстыми в других точках.

Если вы находите концептуализацию всего этого небольшим изгибом, проработайте все это ради круга в 2D, прежде чем заниматься 3-м измерением.

1

Расстояние между точками = радиус сферы.

(Центральная позиция) & (Сфера радиус) - это все, что вам нужно. Вы можете проверить, находится ли точка в пределах сферы, если ее расстояние до центра меньше радиуса.

Смежные вопросы