Стилизация сфер и расстояние между сетками в Graphics3D - PullRequest
1 голос
/ 14 ноября 2011

Обратите внимание:

colors = {Red, Green, Blue};
style = {Thickness[.01], Thickness[.01], Thickness[.01]};
cAxes = {{{0, 0, 0}, {0, 0, 1}}, {{0, 0, 0}, {0, 1, 0}}, {{0, 0, 
 0}, {1, 0, 0}}};

Graphics3D[{{#1, #2, Line@#3} & @@@ Transpose@{colors, style, cAxes}, 
Blue, Specularity[White, 3], Sphere[{.5, .5, .5}, .1]}, 
Boxed -> False, FaceGrids -> All, 
FaceGridsStyle -> Directive[Black, Dashed]]

Использование решения Йоды на Как стилизовать линии

Как можно раскрасить Сферу с помощью GrayLevel (Я буду манипулировать этим позже).

И как я могу иметь более плотную FaceGrids ?10 линий по горизонтали и вертикали.Я также не понимаю, почему ребра друг от друга далеки друг от друга.

enter image description here

Ответы [ 3 ]

2 голосов
/ 14 ноября 2011

Всегда полезно группировать графический объект и его стили в списке, если вам нужно быстро добавить еще один объект с другими стилями.Под этим я подразумеваю запись как {Blue, Specularity[White, 3], Sphere[{.5, .5, .5}, .1]}.Теперь вы можете легко добавить термин GrayLevel перед Sphere, и он будет работать.

Для FaceGrids я считаю, что вам придется вручную определять линии на желаемом расстоянии для каждой грани,Вот пример, показывающий, как это сделать для одной грани.

Graphics3D[{{#1, #2, Line@#3} & @@@ 
   Transpose@{colors, style, cAxes}, {Blue, GrayLevel[0.3], Lighting -> "Neutral",
   Specularity[White, 3], Sphere[{.5, .5, .5}, .1]}}, Boxed -> False, 
 FaceGrids -> {{{0, 0, 1}, 
    Transpose@({#, #} & /@ Range[0, 1, 0.1])}}, 
 FaceGridsStyle -> Directive[Black, Dashed]]

enter image description here

Грани определены как ±1 для соответствующей плоскости, а две другие равны нулю.Так что {0,0,1} в моем примере соответствует плоскости z=1.

Список, предоставленный для FaceGrids, может быть легко вычислен для каждой грани, вместо того, чтобы вводить их вручную, , но я оставлючто вам:)

РЕДАКТИРОВАТЬ:

Поскольку вы хотите, чтобы вокруг была равномерная сетка, определите, где вы хотите, чтобы линии сетки были нарисованы как

gridList = Transpose@({#, #} & /@ Range[0, 1, 0.1]);

Затемиспользуйте следующее для FaceGrids:

FaceGrids -> Join @@ Table[{RotateLeft[j {0, 0, 1}, i], gridList}, 
    {i, {0, 1, 2}}, {j, {-1, 1}}]

Вот как должен выглядеть результат с PlotRangePadding -> None:

enter image description here

1 голос
/ 14 ноября 2011

Йода побил меня, чтобы набрать настройку FaceGrids (см. документация ). Но вот альтернатива.

Вместо явной настройки FaceGrids можно также попробовать установить FrameTicks, поскольку по умолчанию FaceGrids следует этим правилам, а затем стиль FrameTicks будет невидимым с помощью Opacity.

1 голос
/ 14 ноября 2011

В дополнение к ответу Йоды:

  • Lighting -> "Neutral" позволит серому объекту отображаться серым цветом, а не разными цветами.

  • PlotRangePadding -> None удалит пробелы на линиях сетки (в зависимости от настройки для PlotRange.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...