Использование азимутального типа проекции карты всегда требует набора правильных параметров для получения хорошего результата. В этом случае стереографическая проекция центрирована на северном полюсе, ее правильные параметры не соответствуют тем, которые вы обычно используете при реализации с проекцией PlateCaree
, которая часто используется. Вот рабочий код, который вы можете попробовать.
# Stereographic projection coverage
# should be specified less than half of a hemisphere
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
m = Basemap(projection='stere', resolution='c',
lat_0=90, lon_0=270, lat_ts=(90.+35.)/2., width=15000000, height=10000000)
# (width, height) is the plot extents in meters
m.drawmeridians(np.arange(0, 360, 30), labels=[1,1,1,0])
m.drawparallels(np.arange(0, 90, 10), labels=[0,0,0,1])
m.drawcoastlines()
m.shadedrelief()
plt.show()
Результирующий сюжет (карта 1):
Чтобы получить другую часть мира в область построения достигается путем повторного центрирования карты.
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
# projection center point
lon0 = 180
lat0 = 60
m = Basemap(projection='stere', resolution='c',
lat_0=lat0, lon_0=lon0, lat_ts=lat0, width=15000000, height=10000000)
m.drawmeridians(np.arange(0, 360, 30), labels=[1,0,0,1]) # left, right, top, bottom
m.drawparallels(np.arange(0, 90, 10), labels=[0,1,1,0])
m.drawcoastlines()
m.shadedrelief()
plt.show()
Выходной график (карта 2):
Указав правильные значения llcrnrlon
, urcrnrlon
, llcrnrlat
, urcrnrlat
, в Basemap()
можно получить экстенты карты по мере необходимости. Вот еще один пример сюжета по просьбе ФП.
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(8,8))
m = Basemap(projection='stere', resolution='c',
lat_0=90, lon_0=-90, lat_ts=(90.+35.)/2.,
llcrnrlon=-142, urcrnrlon=78, llcrnrlat=19, urcrnrlat=45)
m.drawmeridians(np.arange(0, 360, 30), labels=[1,0,1,0]) # left, right, top, bottom
m.drawparallels(np.arange(0, 90, 10), labels=[0,1,0,1])
m.drawcoastlines()
m.shadedrelief()
plt.show()
Полученный сюжет (карта 3):
Помимо проблемы с вложенностью комментариев в стиле C, отключение блоков кода с помощью #if 0
имеет преимущество, заключающееся в возможности свертывания, если вы используете редактор, который поддерживает свертывание кода. Это также очень легко сделать в любом редакторе, тогда как отключение больших блоков кода с помощью комментариев в стиле C ++ может быть громоздким без поддержки редактора / макросов.
Кроме того, многие блоки #if 0
также имеют блок else
. Это дает простой способ переключения между двумя реализациями / алгоритмами и, вероятно, менее подвержен ошибкам, чем массовое комментирование одного раздела и массовое раскомментирование другого. Тем не менее, вам лучше использовать что-то более читаемое, например #if DEBUG
, в этом случае.
Ух ты! Не переусердствуйте ...
Я бы назвал это более неряшливым для большего расстояния, чем что-либо еще. У меня было время, когда я находил, что лучше помещать короткие заявления в одну строку с их IF, хотя эти заявления растягивают его.
Встроенный стиль лучше для вертикальной краткости ... может быть легко разбит на 4, больше строк
if (pwbuf)
sprintf(username,"%s",pwbuf->pw_name);
else
sprintf(username,"%d",user_id);
Лично я ненавижу следующий стиль, так как он такой многословный, что затрудняет просмотр файл.
if (pwbuf)
{
sprintf(username,"%s",pwbuf->pw_name);
}
else
{
sprintf(username,"%d",user_id);
}
if ( pwbuf ) sprintf(username,"%s",pwbuf->pw_name);
else sprintf(username,"%d",user_id);
Идиоматичный и лаконичный. Если бы к нему прикоснулись более 2 или 3 раз, я бы поставил его в скобки и добавил. Это не очень удобно, если вы добавляете информацию о регистрации или другие условия.
#if 0
....
#endif
Хорошо включить блоки отладочного кода или нет. Кроме того, можно было бы избежать ошибок компиляции, связанных с попыткой блокировать комментарии такого рода:
/* line comment */
...
/* line comment again */
Поскольку комментарии блока C не вкладываются.
#if 0 ... #endif
довольно часто встречается в старом C-коде. Причина в том, что комментирование с комментариями в стиле C /* .... */
не работает, потому что комментарии не вкладываются.
Несмотря на то, что это часто встречается, я бы сказал, что ему нет места в современном коде. Люди делали это в старину, потому что их текстовые редакторы не могли автоматически блокировать комментарии больших разделов. Более того, они не имели надлежащего контроля исходного кода, как сейчас. Нет оправдания тому, чтобы оставлять комментарии или # ifdef'd в рабочем коде.