Английский язык: Sphere wireframe - ортогональная проекция сферы. На изображении показаны линии, нарисованные так, как будто они были нарисованы на поверхности сферы. Угловое расстояние между двумя линиями 10 °. Файл SVG создается указанной ниже программой на C ++, которая вычисляет каждый край линии как дугу эллипса. Задняя сторона сферы имеет непрозрачность 0,25. Наклон оси 52,5 °.
Дата
Источник
Наша работа
Автор
Компьютерщик3
Другие версии
Сфера fill_blue.svg
Каркас сферы 10deg 10r.svg
я Исходный код этого SVG является действительным .
Исходный код
Это изображение может быть полностью сгенерировано с помощью следующего исходного кода. Если у вас установлена коллекция компиляторов GNU, программу можно скомпилировать с помощью следующих команд:
g ++ Sphere_wireframe.cpp -o Sphere_wireframe
и запустите:
./sphere_wireframe> Sphere_wireframe.svg
В рабочем каталоге создается файл Sphere_wireframe.svg. Этот файл можно просмотреть с помощью программы rsvg-view:
rsvg-view Sphere_wireframe.svg
Вот код cpp в файле :phere_wireframe.cpp
/ * сфера - создает файл векторной графики svg, который изображает каркасную сферу * * Copyright (C) 2008 Wikimedia foundation * * Эта программа является бесплатной; вы можете распространять и / или изменять * его в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной * Free Software Foundation; либо версии 2, либо (по вашему выбору) * любой более поздней версии. * * Эта программа распространяется в надежде, что она будет полезной, * но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии ТОВАРНОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. См. * Стандартную общественную лицензию GNU для более подробной информации. * * Вы должны были получить копию Стандартной общественной лицензии GNU * вместе с этой программой; в противном случае вы можете отправить электронное письмо автору этой * программы (см. ниже) или написать по адресу : * The Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA * // * Правильность выражений в этом коде не доказана. * Следовательно, этот код, вероятно, содержит много ошибок. Будьте внимательны! * /#include #include #include #include используя пространство имен std ;const двойной PI = 3,1415926535897932 ; const double DEG = PI / 180,0 ;/********************************* настройки *************** ******************* / int n_lon = 18 ; // количество полей широты (18 => 10 ° каждое) int n_lat = 18 ; // половина полей долготы (18 => 10 ° каждое) double lon_offset = 2.5 * DEG ; // смещение меридианов double w = 52,5 * DEG ; // наклон оси (0 ° => ось перпендикулярна плоскости изображения) double stripe_grad = 0.5 * DEG ; // ширина каждой строки int image_size = 400 ; // ширина и высота изображения в пикселях double back_opacity = 0.25 ; // прозрачность обратной стороны сферы char color [] = "# 334070" ; // цвет линий int istep = 2 ; // Шаг отступа в svg-коде / ****************************************** ********************************** /двойной sqr ( двойной х ) { возврат ( х * х ); }// команды для svg-кода: void indent ( int n , bool in_tag = false ) { n * = istep ; если ( in_tag ) n + = istep + 1 ; для ( int я = 0 ; я < п ; я ++ ) cout << "" ; } void M () { cout << "M" ; } void Z () { cout << "Z" ; } void xy ( double x , double y ) { cout << x << "," ; cout << y << "" ; } void arc ( double a , double b , double x_axis_rot , bool large_arc , bool sweep ) { // рисует эллиптическую дугу if ( b < 0.5E-6 ) { // плоские эллипсы не отображаются должным образом => используйте линию cout < < "L" ; } else { cout << "A" ; cout << a << "," ; // большая полуось cout << b << "" ; // Малая полуось cout << x_axis_rot << "" ; cout << large_arc << "" ; cout << развертка << "" ; } } пустой круг ( bool по часовой стрелке ) { M (); ху ( -1 , 0 ); дуги ( 1 , 1 , 0 , 0 , ! по часовой стрелке ); ху ( 1 , 0 ); дуги ( 1 , 1 , 0 , 0 , ! по часовой стрелке ); ху ( -1 , 0 ); Z (); }void start_svg_file () { cout << " xml version = \" 1.0 \ " encoding = \" UTF-8 \ " standalone = \" нет \ " ?> \ n " ; cout << "\" Sphere_wireframe \ "\ n " ; cout << "версия = \" 1.1 \ "\ n " ; cout << "baseProfile = \" полный \ "\ n " ; cout << "xmlns = \" http://www.w3.org/2000/svg \ "\ n " ; cout << "xmlns: xlink = \" http://www.w3.org/1999/xlink \ "\ n " ; cout << "width = \" " << image_size << " \ "\ n " ; cout << "height = \" " << размер_изображения << " \ " > \ n \ n " ; cout << " Каркас сферы \ n \ n " ; cout << "\ n " ; cout << "о: http://commons.wikimedia.org/wiki/Image:Sphere_wireframe.svg \ n " ; cout << "права: лицензия свободной документации GNU, \ n " ; cout << "Лицензия Creative Commons Attribution ShareAlike \ n " ; cout << " \ n \ n " ; cout << "\" сфера \ " transform = \" scale (" << 0,5 * размер_изображения ; cout << ", " << -0,5 * размер_изображения << ") translate (1, -1) \ " > \ п " ; }void end_svg_file () { cout << " \ n \ n " ; }int main ( int argc , char * argv []) { // принимаем -lat и -lon в качестве параметра для ( int i = 2 ; i < argc ; i ++ ) { if ( isdigit ( argv [ i ] [ 0 ] ) || ( sizeof ( argv [ i ]) > sizeof ( char ) && isdigit ( argv [ i ] [ 1 ]) && ( argv [ i ] [ 0 ] == '.' || argv [ i ] [ 0 ]) == '-' ))) { если ( strcmp ( argv [ i - 1 ], "-lon" ) == 0 ) { lon_offset = atof ( argv [ i ]) * DEG ; } если ( strcmp ( argv [ i - 1 ], "-lat" ) == 0 ) { w = atof ( argv [ i ]) * DEG ; } } } двойной cosw = cos ( w ), sinw = sin ( w ); двойной d = 0,5 * stripe_grad ;start_svg_file (); int ind = 2 ; // начальный уровень отступа indent ( ind ); cout << "\" Sphere_back \ " transform = \" rotate (180) \ " " ; cout << "opacity = \" " << back_opacity << " \ " > \ n " ; отступ ( ++ ind ); cout << "\" полусферы \ " > \ n " ;// отступ меридианов ( ++ ind ); cout << "\" меридианы \ "\ n " ; отступ ( ind ++ , true ); cout << "style = \" ход: нет; fill: " << цвет << "; fill_rule: evenodd \ " > \ n " ; двойной a = abs ( cos ( d )); for ( int i_lon = 0 ; i_lon < n_lat ; i_lon ++ ) { // рисуем один меридиан двойной долготы = lon_offset + ( i_lon * 180.0 / n_lat ) * DEG ; двойной лон [ 2 ]; lon [ 0 ] = долгота + d ; lon [ 1 ] = долгота - d ;отступ ( инд ); cout << "<путь id = \" меридиан " ; cout << i_lon << " \ "\ n " ; отступ ( инд , истина ); cout << "d = \" " ;double axis_rot = atan2 ( -1.0 / tan ( долгота ), cosw ); если ( sinw < 0 ) axis_rot + = PI ; двойной w2 = sin ( долгота ) * sinw ; двойной b = abs ( w2 * cos ( d ));double sinw1 = sin ( d ) / sqrt ( 1.0 - sqr ( sin ( долгота ) * sinw ));if ( abs ( sinw1 ) > = 1.0 ) { // полоса закрывает край круга double w3 = sqrt ( 1.0 - sqr ( w2 )) * sin ( d ); круг ( ложь ); // эллипс M (); xy ( sin ( axis_rot ) * w3 - cos ( axis_rot ) * a , - cos ( axis_rot ) * w3 - sin ( axis_rot ) * a ); дуга ( a , b , axis_rot / DEG , 0 , 0 ); xy ( sin ( axis_rot ) * w3 + cos ( axis_rot ) * a , - cos ( axis_rot ) * w3 + sin ( axis_rot ) * a ); дуга ( a , b , axis_rot / DEG , 0 , 0 ); xy ( sin ( axis_rot ) * w3 - cos ( axis_rot ) * a , - cos ( axis_rot ) * w3 - sin ( axis_rot ) * a ); Z (); } else { // рисуем ломаную дугу эллипса double w1 = asin ( sinw1 ); M (); xy ( - cos ( axis_rot + w1 ), - sin ( axis_rot + w1 )); дуга ( a , b , axis_rot / DEG , 1 , 0 ); xy ( cos ( axis_rot - w1 ), sin ( axis_rot - w1 )); дуга ( 1 , 1 , 0 , 0 , 1 ); xy ( cos ( axis_rot + w1 ), sin ( axis_rot + w1 )); дуга ( a , b , axis_rot / DEG , 0 , 1 ); xy ( - cos ( axis_rot - w1 ), - sin ( axis_rot - w1 )); дуга ( 1 , 1 , 0 , 0 , 1 ); xy ( - cos ( axis_rot + w1 ), - sin ( axis_rot + w1 )); } Z (); cout << " \" /> \ n " ; } отступ ( - ind ); cout << " \ n " ;cout << endl ;// круги широты отступа ( инд ); cout << "\" круги_широты \ "\ n " ; отступ ( инд , истина ); cout << "style = \" ход: нет; fill: " << цвет << "; fill_rule: evenodd \ " > \ n " ; ind ++ ; for ( int i_lat = 1 ; i_lat < n_lon ; i_lat ++ ) { // рисуем один круг широты двойной широты = ( i_lat * 180.0 / n_lon - 90.0 ) * DEG ; двойной лат [ 2 ]; Lat [ 0 ] = широта + d ; lat [ 1 ] = широта - d ; двойной x [ 2 ], yd [ 2 ], ym [ 2 ]; для ( int i = 0 ; i < 2 ; i ++ ) { x [ i ] = abs ( cos ( lat [ i ])); yd [ i ] = abs ( cosw * cos ( lat [ i ])); ym [ i ] = sinw * sin ( лат [ i ]); } двойной ч [ 4 ]; // высота каждой точки над плоскостью изображения h [ 0 ] = sin ( lat [ 0 ] + w ); ч [ 1 ] = грех ( лат [ 0 ] - ш ); ч [ 2 ] = грех ( лат [ 1 ] + ш ); ч [ 3 ] = грех ( лат [ 1 ] - ш );if ( h [ 0 ] > 0 || h [ 1 ] > 0 || h [ 2 ] > 0 || h [ 3 ] > 0 ) { // хотя бы любая часть видимого отступа ( ind ); cout << "<путь id = \" круг_широты " ; cout << i_lat << " \ "\ n " ; отступ ( инд , истина ); cout << "d = \" " ; for ( int i = 0 ; i < 2 ; i ++ ) { if (( h [ 2 * i ] > = 0 && h [ 2 * i + 1 ] > = 0 ) && ( h [ 2 * i ] > 0 || h [ 2 * i + 1 ] > 0 )) { // полный эллипс M (); xy ( - x [ i ], ym [ i ]); // начальная точка для ( int z = 1 ; z > -2 ; z - = 2 ) { arc ( x [ i ], yd [ i ], 0 , 1 , i ); xy ( z * x [ i ], ym [ i ]); } Z (); if ( h [ 2-2 * i ] * h [ 3-2 * i ] < 0 ) { // частично эллипс + частично двойной круг yp = sin ( lat [ 1 - i ]) / sinw ; double xp = sqrt ( 1.0 - sqr ( yp )); if ( sinw < 0 ) { xp = - xp ; } M (); xy ( - xp , yp ); arc ( x [ 1 - i ], yd [ 1 - i ], 0 , sin ( lat [ 1 - i ]) * cosw > 0 , cosw > = 0 ); xy ( xp , yp ); arc ( 1 , 1 , 0 , 0 , cosw > = 0 ); xy ( - xp , yp ); Z (); } else if ( h [ 2-2 * i ] <= 0 && h [ 3-2 * i ] <= 0 ) { // полоса закрывает край круг круг ( cosw < 0 ); } } }if (( h [ 0 ] * h [ 1 ] < 0 && h [ 2 ] <= 0 && h [ 3 ] <= 0 ) || ( h [ 0 ] <= 0 && h [ 1 ] <= 0 && h [ 2 ] * h [ 3 ] < 0 )) { // видим один срез int i = h [ 0 ] <= 0 && h [ 1 ] <= 0 ; двойной yp = sin ( лат [ i ]) / sinw ; двойной xp = sqrt ( 1.0 - yp * yp ); M (); ху ( - xp , yp ); arc ( x [ i ], yd [ i ], 0 , sin ( lat [ i ]) * cosw > 0 , cosw * sinw > = 0 ); ху ( хр , ур ); arc ( 1 , 1 , 0 , 0 , cosw * sinw < 0 ); ху ( - xp , yp ); Z (); } else if ( h [ 0 ] * h [ 1 ] < 0 && h [ 2 ] * h [ 3 ] < 0 ) { // разрушенный лук эллипса double xp [ 2 ], yp [ 2 ]; для ( int i = 0 ; i < 2 ; i ++ ) { yp [ i ] = sin ( lat [ i ]) / sinw ; xp [ i ] = sqrt ( 1.0 - sqr ( yp [ i ])); если ( sinw < 0 ) xp [ i ] = - xp [ i ]; } M (); xy ( - xp [ 0 ], yp [ 0 ]); arc ( x [ 0 ], yd [ 0 ], 0 , sin ( lat [ 0 ]) * cosw > 0 , cosw > = 0 ); ху ( xp [ 0 ], yp [ 0 ]); дуга ( 1 , 1 , 0 , 0 , 0 ); ху ( xp [ 1 ], yp [ 1 ]); arc ( x [ 1 ], yd [ 1 ], 0 , sin ( lat [ 1 ]) * cosw > 0 , cosw < 0 ); xy ( - xp [ 1 ], yp [ 1 ]); дуга ( 1 , 1 , 0 , 0 , 0 ); xy ( - xp [ 0 ], yp [ 0 ]); Z (); } cout << " \" /> \ n " ; } } for ( int i = 0 ; i < 3 ; i ++ ) { indent ( - ind ); cout << " \ n " ; } indent ( ind - ); cout << "\" сфера_фронт \ " xlink: href = \" #sphere_half \ " /> \ n " ; end_svg_file (); }
Лицензирование
Я, владелец авторских прав на это произведение, публикую его под следующими лицензиями:
Разрешается копировать, распространять и / или изменять этот документ в соответствии с условиями лицензии GNU Free Documentation License версии 1.2 или любой более поздней версии, опубликованной Free Software Foundation ; без неизменяемых разделов, без текстов на лицевой обложке и без текстов на задней обложке. Копия лицензии включена в раздел под названием GNU Free Documentation License .http://www.gnu.org/copyleft/fdl.htmlGFDLЛицензия свободной документации GNUправдаправда
делиться - копировать, распространять и передавать произведение
ремикс - адаптировать произведение
При следующих условиях:
Атрибуция - вы должны указать соответствующий источник, предоставить ссылку на лицензию и указать, были ли внесены изменения. Вы можете сделать это любым разумным способом, но не любым способом, который предполагает, что лицензиар одобряет вас или ваше использование.
делиться одинаково - если вы ремикшируете, трансформируете или опираетесь на материал, вы должны распространять свои материалы по той же или совместимой лицензии, что и оригинал.
{{Information | Description = {{en | 1 = Каркас сферы) - на изображении показаны линии, нарисованные так, как они были нарисованы на поверхности сферы. Расстояние между двумя линиями 10 °. Файл svg создается указанной ниже программой на C ++, которая вычисляет каждый
Использование файла
Следующие страницы английской Википедии используют этот файл (страницы других проектов не указаны):
Математика: MA TER / Theorie / Geometrie des Raums
Математика: AT PSA / Theorie / Expertenniveau 2
Математика: AT BRP / Theorie nach Thema / Geometrie des Raums
Математика: AT PSA / Theorie nach Thema / Geometrie des Raums
Математика: AT AHS / Theorie / Klasse 1
Математика: AT AHS / Theorie nach Thema / Geometrie des Raums
Математика: AT AHS / Theorie / Klasse 4
Математика: BY GYM / Theorie / Klasse 8
Математика: BY GYM / Theorie nach Thema / Geometrie des Raums
Использование на de.wiktionary.org
Кугель
Использование на el.wikipedia.org
Μπάλα (μαθηματικά)
Использование на eo.wikipedia.org
Geometrio
Глобо (математико)
Использование на es.wikipedia.org
Geometría
N-esfera
Использование на et.wikipedia.org
Sfäär
Использование на eu.wikipedia.org
Эсфера
Lankide: Yaiza Garcia / Proba orria.
Использование на fa.wikipedia.org
ابرکره
Использование на fi.wikipedia.org
Yksikköpallo
Использование на fr.wikipedia.org
Сфера
N-сфер
Использование на gcr.wikipedia.org
Sfèr
Использование на hy.wikipedia.org
Գունդ
Երկրաչափություն
Использование на id.wikipedia.org
Geometri
Использование на is.wikipedia.org
Ифирборо
Использование на it.wikipedia.org
Utente: LoStrangolatore / Appunti raccolti da wikigrafico / Grafica vettoriale / 3D
Использование на ja.wikipedia.org
球体
超 球面
Использование на ja.wikibooks.org
小学校 算数 / 3 学年
Использование на ko.wikipedia.org
공 (수학)
곡면
Использование на mk.wikipedia.org
Топка (геометрија)
Хиперсфера
Посмотреть более глобальное использование этого файла.
Метаданные
Этот файл содержит дополнительную информацию, вероятно, добавленную с цифровой камеры или сканера, которые использовались для ее создания или оцифровки.
Если файл был изменен по сравнению с исходным состоянием, некоторые детали могут не полностью отражать измененный файл.