Как научиться строить сечения


Учимся строить сечения многогранников. Часть 2.

Учимся строить сечения многогранников. Часть 2.

Эта статья для тех, кто хочет научиться строить сечения. Она содержит 11 заданий для построения сечений, подсказки и ответы к каждому заданию. Рекомендую сначала прочитать эту статью и посмотреть это видео.

Вспомним, что сечение многогранника плоскостью представляет собой плоский многоугольник, вершины которого принадлежат сторонам, а ребра - граням многогранника. Две соседние вершины принадлежат одной грани многогранника. 

Чтобы найти точку, лежащую одновременно в двух плоскостях, нужно найти точку пересечения прямой, лежащей в первой плоскости, с прямой, лежащей во второй плоскости.

 

В подсказках и ответах изображение  дополнительных прямых, используемых при построении сечения, сплошными линиями или пунктирными, не зависит от того, видимы эти прямые или нет.

Рядом с каждой дополнительной прямой указан ее порядковый номер при построении сечения. Все прямые проведены через две точки, принадлежащие определенной плоскости. Прямые пронумерованы в порядке их построения. Рекомендуется при использовании подсказки и воспроизведении построения сечения проговаривать, какой плоскости принадлежит данная прямая, каким плоскостям принадлежит точка их пересечения.

Постройте сечения, проходящие через точки .

Задание 1:

Подсказка. показать

Ответ. показать

Задание 2:

Подсказка: показать

 

Ответ: показать

Задание 3:

Подсказка: показать

 

Ответ: показать

Задание 4:

 

Подсказка: показать

 

Ответ: показать

 

Задание 5:

Подсказка: показать

 

Ответ: показать

 

Задание 6:

Подсказка: показать

Ответ: показать

 

Задание 7:

Подсказка: показать

Ответ: показать

Задание 8:

Подсказка: показать

Ответ: показать

 

Задание 9:

Подсказка: показать

Ответ: показать

 

Задание 10:

 

Подсказка: показать

Ответ: показать

 

 

Задание 11:

 

Подсказка: показать

Ответ: показать

И. В. Фельдман, репетитор по математике.

Алгоритм

- Как мне получить трехмерное поперечное сечение четырехмерной сетки?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

новейших вопросов по кросс-сборке - Stack overflow на русском Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.

Как собрать кросс-компилятор GCC

GCC - это не просто компилятор. Это проект с открытым исходным кодом, который позволяет создавать любые компиляторы. Некоторые компиляторы поддерживают многопоточность; некоторые поддерживают разделяемые библиотеки; некоторые поддерживают Multilib. Все зависит от того, как вы настроили компилятор перед его сборкой.

Это руководство продемонстрирует, как создать кросс-компилятор , который представляет собой компилятор, который создает программы для другой машины. Все, что вам нужно, это Unix-подобная среда с уже установленной последней версией GCC.

В этом руководстве я буду использовать Debian Linux для создания полного кросс-компилятора C ++ для AArch64 , 64-разрядного набора инструкций, доступного в последних процессорах ARM. На самом деле у меня нет устройства AArch64 - мне просто нужен компилятор AArch64, чтобы проверить эту ошибку.

Необходимые пакеты

Начиная с чистой системы Debian, вы должны сначала установить несколько пакетов:

  $ sudo apt-get install g ++ make gawk  

Все остальное будет построено из исходников.Создайте где-нибудь новый каталог и загрузите следующие пакеты с исходным кодом. (Если вы будете следовать этому руководству позже, будут доступны более свежие выпуски каждого пакета. Проверьте наличие более новых выпусков, вставив каждый URL-адрес в свой браузер без имени файла. Например: http: //ftpmirror.gnu. org / binutils /)

  $ wget http://ftpmirror.gnu.org/binutils/binutils-2.24.tar.gz $ wget http://ftpmirror.gnu.org/gcc/gcc-4.9.2/gcc-4.9.2.tar.gz $ wget https: //www.kernel.org / pub / linux / kernel / v3.x / linux-3.17.2.tar.xz $ wget http://ftpmirror.gnu.org/glibc/glibc-2.20.tar.xz $ wget http://ftpmirror.gnu.org/mpfr/mpfr-3.1.2.tar.xz $ wget http://ftpmirror.gnu.org/gmp/gmp-6.0.0a.tar.xz $ wget http://ftpmirror.gnu.org/mpc/mpc-1.0.2.tar.gz $ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.12.2.tar.bz2 $ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/cloog-0.18.1.tar.gz  

Первые четыре пакета - Binutils, GCC, ядро ​​Linux и Glibc - являются основными.Мы могли бы установить следующие три пакета в двоичной форме, используя вместо этого диспетчер пакетов нашей системы, но он, как правило, предоставляет более старые версии. Последние два пакета, ISL и CLooG, необязательны, но они позволяют сделать еще несколько оптимизаций в компиляторе, который мы собираемся построить.

Как детали сочетаются друг с другом

К тому времени, когда мы закончим, мы создадим каждую из следующих программ и библиотек. Сначала мы создадим инструменты слева, а затем воспользуемся этими инструментами для создания программ и библиотек справа.На самом деле мы не будем собирать ядро ​​Linux целевой системы, но нам нужны файлы заголовков ядра, чтобы построить стандартную библиотеку C.

Компиляторы слева будут вызывать ассемблер и компоновщик как часть своей работы. Все остальные загруженные нами пакеты, такие как MPFR, GMP и MPC, будут связаны с самими компиляторами.

На диаграмме справа представлен пример программы a.out , работающей в целевой ОС, созданной с использованием кросс-компилятора и связанной со стандартными библиотеками C и C ++ целевой системы.Стандартная библиотека C ++ выполняет вызовы стандартной библиотеки C, а библиотека C выполняет прямые системные вызовы ядра Linux AArch64.

Обратите внимание, что вместо использования Glibc в качестве стандартной реализации библиотеки C мы могли бы использовать Newlib, альтернативную реализацию. Newlib - популярная реализация библиотеки C для встраиваемых устройств. В отличие от Glibc, Newlib не требует полной ОС в целевой системе - только тонкий слой аппаратной абстракции под названием Libgloss. У Newlib нет регулярных выпусков; вместо этого вы должны получить исходный код прямо из репозитория Newlib CVS.Одним из ограничений Newlib является то, что в настоящее время он, похоже, не поддерживает создание многопоточных программ для AArch64. Вот почему я решил не использовать его здесь.

Шаги сборки

Распакуйте все пакеты с исходным кодом.

  $ за f в * .tar *; сделать tar xf $ f; сделано  

Создайте символические ссылки из каталога GCC на некоторые другие каталоги. Эти пять пакетов являются зависимостями GCC, и при наличии символических ссылок сценарий сборки GCC построит их автоматически.

  $ cd gcc-4.9.2 $ ln -s ../mpfr-3.1.2 mpfr $ ln -s ../gmp-6.0.0 gmp $ ln -s ../mpc-1.0.2 mpc $ ln -s ../isl-0.12.2 isl $ ln -s ../cloog-0.18.1 Cloog $ cd ..  

Выберите каталог для установки и убедитесь, что у вас есть разрешение на запись в него. В следующих шагах я установлю новую цепочку инструментов на / opt / cross .

  $ судо mkdir -p / opt / cross $ sudo chown джефф / opt / cross  

На протяжении всего процесса сборки убедитесь, что подкаталог установки bin находится в переменной среды PATH .Вы можете удалить этот каталог из вашего PATH позже, но большинство шагов сборки ожидают найти aarch64-linux-gcc и другие инструменты хоста через PATH по умолчанию.

  $ экспорт ПУТЬ = / opt / cross / bin: $ ПУТЬ  

Обратите особое внимание на то, что устанавливается под / opt / cross / aarch64-linux / . Этот каталог считается системным корнем воображаемой целевой системы AArch64 Linux. Собственный компилятор Linux AArch64 теоретически может использовать все размещенные здесь заголовки и библиотеки.Очевидно, что ни одна из программ, созданных для хост-системы, например, сам кросс-компилятор, не будет установлена ​​в этот каталог.

1. Binutils

На этом этапе выполняется сборка и установка кросс-ассемблера, кросс-линкера и других инструментов.

  $ mkdir build-binutils $ cd build-binutils $ ../binutils-2.24/configure --prefix = / opt / cross --target = aarch64-linux --disable-Multilib $ make -j4 $ make install $ cd ..  
  • Мы указали aarch64-linux в качестве типа целевой системы.Сценарий настройки Binutils распознает, что эта цель отличается от машины, на которой мы строим, и в результате настроит кросс-ассемблер и кросс-линкер. Инструменты будут установлены в / opt / cross / bin , их имена будут иметь префикс aarch64-linux- .
  • --disable-Multilib означает, что мы хотим, чтобы наша установка Binutils работала только с программами и библиотеками, использующими набор инструкций AArch64, а не какие-либо связанные наборы инструкций, такие как AArch42.

На этом шаге устанавливаются файлы заголовков ядра Linux в / opt / cross / aarch64-linux / include , что в конечном итоге позволит программам, созданным с использованием нашей новой инструментальной цепочки, выполнять системные вызовы ядра AArch64 в целевой среде.

  $ cd linux-3.17.2 $ make ARCH = arm64 INSTALL_HDR_PATH = / opt / cross / aarch64-linux headers_install $ cd ..  
  • Мы могли сделать это даже до установки Binutils.
  • Заголовочные файлы ядра Linux фактически не будут использоваться до шага 6, когда мы создадим стандартную библиотеку C, хотя сценарий configure на шаге 4 предполагает, что они уже установлены.
  • Поскольку ядро ​​Linux представляет собой проект с открытым исходным кодом, отличный от других, он имеет другой способ определения целевой архитектуры ЦП: ARCH = arm64

Все оставшиеся шаги включают сборку GCC и Glibc. Хитрость в том, что есть части GCC, которые зависят от частей Glibc, которые уже создаются, и наоборот. Мы не можем создать ни один из пакетов за один шаг; нам нужно переключаться между двумя пакетами и строить их компоненты таким образом, чтобы удовлетворить их зависимости.

3. Компиляторы C / C ++

На этом шаге будут собраны только кросс-компиляторы GCC C и C ++, и они будут установлены в / opt / cross / bin . Он пока не будет вызывать эти компиляторы для сборки каких-либо библиотек.

  $ mkdir -p build-gcc $ cd build-gcc $ ../gcc-4.9.2/configure --prefix = / opt / cross --target = aarch64-linux --enable-languages ​​= c, c ++ --disable-Multilib $ make -j4 все-gcc $ make install-gcc $ cd ..  
  • Поскольку мы указали --target = aarch64-linux , сценарий сборки ищет кросс-инструменты Binutils, которые мы создали на шаге 1, с именами с префиксом aarch64-linux- .Точно так же имена компиляторов C / C ++ будут иметь префикс aarch64-linux- .
  • --enable-languages ​​= c, c ++ запрещает сборку других компиляторов в пакете GCC, таких как Fortran, Go или Java.

4. Заголовки стандартной библиотеки C и файлы запуска

На этом этапе мы устанавливаем стандартные заголовки библиотеки C Glibc в / opt / cross / aarch64-linux / include . Мы также используем компилятор C, созданный на шаге 3, для компиляции файлов запуска библиотеки и их установки в / opt / cross / aarch64-linux / lib .Наконец, мы создаем пару фиктивных файлов, libc.so и stubs.h , которые ожидаются на шаге 5, но будут заменены на шаге 6.

  $ mkdir -p сборка-glibc $ cd build-glibc $ ../glibc-2.20/configure --prefix = / opt / cross / aarch64-linux --build = $ MACHTYPE --host = aarch64-linux --target = aarch64-linux --with-headers = / opt / cross / aarch64-linux / include --disable-Multilib libc_cv_forced_unwind = да $ make install-bootstrap-headers = yes install-headers $ make -j4 csu / subdir_lib $ install csu / crt1.o csu / crti.o csu / crtn.o / opt / cross / aarch64-linux / lib $ aarch64-linux-gcc -nostdlib -nostartfiles -shared -x c / dev / null -o /opt/cross/aarch64-linux/lib/libc.so $ touch /opt/cross/aarch64-linux/include/gnu/stubs.h $ cd ..  
  • --prefix = / opt / cross / aarch64-linux сообщает сценарию настройки Glibc , куда следует установить свои заголовки и библиотеки. Обратите внимание, что он отличается от обычного - префикс .
  • Несмотря на некоторую противоречивую информацию, сценарий Glibc configure в настоящее время требует от нас указать все три типа систем: --build , --host и --target .
  • $ MACHTYPE - предопределенная переменная среды, которая описывает машину, на которой выполняется сценарий сборки. --build = $ MACHTYPE необходим, потому что на шаге 6 сценарий сборки скомпилирует некоторые дополнительные инструменты, которые запускаются как часть самого процесса сборки.
  • --host здесь имеет другое значение, чем мы использовали до сих пор. В конфигурации Glibc параметры --host и --target предназначены для описания системы, в которой в конечном итоге будут работать библиотеки Glibc.
  • Мы устанавливаем файлы запуска библиотеки C, crt1.o , crti.o и crtn.o , в каталог установки вручную. Похоже, что правило делает не делает этого без других побочных эффектов.

5. Библиотека поддержки компилятора

На этом этапе используются кросс-компиляторы, созданные на этапе 3, для создания библиотеки поддержки компилятора. Библиотека поддержки компилятора, помимо прочего, содержит некоторый шаблонный код обработки исключений C ++.Эта библиотека зависит от файлов запуска, установленных на шаге 4. Сама библиотека необходима на шаге 6. В отличие от некоторых других руководств, нам не нужно повторно запускать GCC configure . Мы просто создаем дополнительные цели в той же конфигурации.

  $ cd build-gcc $ make -j4 все-цель-libgcc $ make install-target-libgcc $ cd ..  
  • Две статические библиотеки, libgcc.a и libgcc_eh.a , установлены в / opt / cross / lib / gcc / aarch64-linux / 4.9.2 / .
  • Общая библиотека libgcc_s.so установлена ​​в / opt / cross / aarch64-linux / lib64 .

6. Стандартная библиотека C

На этом этапе мы завершаем пакет Glibc, который собирает стандартную библиотеку C и устанавливает ее файлы в / opt / cross / aarch64-linux / lib / . Статическая библиотека называется libc.a , а общая библиотека - libc.so .

  $ cd build-glibc $ make -j4 $ make install $ cd..  

7. Стандартная библиотека C ++

Наконец, мы завершаем пакет GCC, который собирает стандартную библиотеку C ++ и устанавливает ее в / opt / cross / aarch64-linux / lib64 / . Это зависит от библиотеки C, созданной на шаге 6. Полученная статическая библиотека называется libstdc ++. A , а общая библиотека - libstdc ++. Поэтому .

  $ cd build-gcc $ make -j4 $ make install $ cd ..  

Работа с ошибками сборки

Если вы обнаружите какие-либо ошибки в процессе сборки, есть три возможности:

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

Вам нужно будет изучить журналы сборки, чтобы определить, какой вариант подходит. GCC поддерживает множество конфигураций, и некоторые из них могут быть созданы не сразу. Чем менее популярна конфигурация, тем больше вероятность того, что она сломается. GCC, будучи проектом с открытым исходным кодом, зависит от вклада пользователей в поддержание работоспособности каждой конфигурации.

Автоматизация вышеуказанных шагов

Я написал небольшой сценарий bash с именем build_cross_gcc для выполнения всех вышеперечисленных шагов. Вы можете найти его на GitHub. На моей машине Debian с Core 2 Quad Q9550 от начала до конца требуется 13 минут. Перед запуском настройте его по своему вкусу.

build_cross_gcc также поддерживает конфигурации Newlib. Когда вы создаете кросс-компилятор на основе Newlib, шаги 4, 5 и 6, описанные выше, можно объединить в один шаг.(Действительно, это то, что делают многие существующие руководства.) Для поддержки Newlib отредактируйте параметры скрипта следующим образом:

  TARGET = aarch64-elf USE_NEWLIB = 1 CONFIGURATION_OPTIONS = "- disable-Multilib --disable-Threads"  

Другой способ создания кросс-компилятора GCC - использовать комбинированное дерево, в котором исходный код для Binutils, GCC и Newlib объединен в один каталог. Комбинированное дерево будет работать, только если библиотеки intl и libiberty в комплекте с GCC и Binutils идентичны, что не относится к версиям, используемым в этой публикации.Комбинированные деревья также не поддерживают Glibc, поэтому это не вариант для этой конфигурации.

Существует несколько популярных скриптов сборки, а именно crossstool-NG и EmbToolkit, которые автоматизируют весь процесс создания кросс-компиляторов. У меня были смешанные результаты с использованием crossstool-NG, но это помогло мне разобраться в процессе сборки при составлении этого руководства.

Тестирование кросс-компилятора

Если все построено успешно, давайте проверим наш кросс-компилятор на гудок:

  $ aarch64-Linux-g ++ -v Использование встроенных спецификаций.COLLECT_GCC = aarch64-Linux-g ++ COLLECT_LTO_WRAPPER = / opt / cross / libexec / gcc / aarch64-linux / 4.9.2 / lto-wrapper Цель: aarch64-linux Настраивается с помощью: ../gcc-4.9.2/configure --prefix = / opt / cross --target = aarch64-linux --enable-languages ​​= c, c ++ --disable-Multilib Модель резьбы: posix gcc версии 4.9.2 (GCC)  

Мы можем скомпилировать программу на C ++ 14 из предыдущего поста, а затем разобрать ее:

  $ aarch64-linux-g ++ -std = c ++ 14 test.cpp $ aarch64-linux-objdump -d а.вне ... 0000000000400830 <основной>: 400830: a9be7bfd stp x29, x30, [sp, # - 32]! 400834: 910003fd mov x29, sp 400838: 910063a2 добавить x2, x29, # 0x18 40083c: 

000 adrp x0, 400000 <_init-0x618> ...

Это была моя первая попытка создать кросс-компилятор. Я написал это руководство, чтобы запомнить то, что я узнал. Я думаю, что описанные выше шаги служат довольно хорошим шаблоном для создания других конфигураций; Я использовал build_cross_gcc для сборки TARGET = powerpc-eabi .Вы можете просмотреть config.sub из любого пакета, чтобы увидеть, какие другие целевые среды поддерживаются. Комментарии и исправления приветствуются!

.

Интерфейсный веб-разработчик - Изучите веб-разработку

Добро пожаловать на наш курс обучения интерфейсному веб-разработчику!

Здесь мы предлагаем вам структурированный курс, который научит вас всему, что вам нужно знать, чтобы стать фронтенд-разработчиком. Просто прорабатывайте каждый раздел, изучая новые навыки (или улучшая существующие) по мере продвижения. Каждый раздел включает в себя упражнения и оценки для проверки вашего понимания, прежде чем двигаться дальше.

Охваченные темы

Охватываемые темы:

  • Базовая настройка и обучение работе с
  • Веб-стандарты и передовые методы (такие как доступность и кросс-браузерная совместимость)
  • HTML, язык, который определяет структуру и смысл веб-контента.
  • CSS, язык, используемый для стилизации веб-страниц
  • JavaScript, язык сценариев, используемый для создания динамических функций в Интернете
  • Инструменты, которые используются для облегчения современной клиентской веб-разработки.

Вы можете работать с разделами по порядку, но каждый из них также является самодостаточным. Например, если вы уже знаете HTML, вы можете сразу перейти к разделу CSS.

Предварительные требования

Чтобы начать этот курс, вам не нужны какие-либо предварительные знания. Все, что вам нужно, это компьютер, на котором можно запускать современные веб-браузеры, подключение к Интернету и желание учиться.

Если вы не уверены, подходит ли вам интерфейсная веб-разработка, и / или хотите мягкого введения перед тем, как приступить к более продолжительному и полному курсу, сначала прочтите наш «Начало работы с веб-модулем».

Получение помощи

Мы постарались сделать изучение интерфейсной веб-разработки максимально комфортным, но вы, вероятно, все равно застрянете, потому что чего-то не понимаете или какой-то код просто не работает.

Не паникуйте. Мы все застреваем, будь мы новички или профессиональные веб-разработчики. В статье «Обучение и получение справки» вы найдете ряд советов по поиску информации и помощи себе. Если вы все еще застряли, не стесняйтесь задать вопрос на нашем форуме Discourse.

Приступим. Удачи!

Путь обучения

Начало работы

Срок выполнения: 1,5–2 часа

Предварительные требования

Ничего, кроме базовой компьютерной грамотности.

Как я узнаю, что готов двигаться дальше?

В этой части курса нет оценок. Но убедитесь, что вы не пропустите. Важно подготовить вас к выполнению упражнений позже в ходе курса.

Направляющие

Семантика и структура с HTML

Срок выполнения: 35–50 часов

Предварительные требования

Ничего, кроме базовой компьютерной грамотности и базовой среды веб-разработки.

Как я узнаю, что готов двигаться дальше?

Оценки в каждом модуле предназначены для проверки ваших знаний по предмету. Завершение оценок подтверждает, что вы готовы перейти к следующему модулю.

Модули

Стили и макет с CSS

Время выполнения: 90–120 часов

Предварительные требования

Перед изучением CSS рекомендуется иметь базовые знания HTML. Вы должны, по крайней мере, сначала изучить Введение в HTML.

Как я узнаю, что готов двигаться дальше?

Оценки в каждом модуле предназначены для проверки ваших знаний по предмету. Завершение оценок подтверждает, что вы готовы перейти к следующему модулю.

Модули
Дополнительные ресурсы

Интерактивность с JavaScript

Срок выполнения: 135–185 часов

Предварительные требования

Перед изучением JavaScript рекомендуется иметь базовые знания HTML.Вы должны, по крайней мере, сначала изучить Введение в HTML.

Как я узнаю, что готов двигаться дальше?

Оценки в каждом модуле предназначены для проверки ваших знаний по предмету. Завершение оценок подтверждает, что вы готовы перейти к следующему модулю.

Модули

Веб-формы - Работа с пользовательскими данными

Срок выполнения: 40–50 часов

Предварительные требования
Формы

требуют знания HTML, CSS и JavaScript.Учитывая сложность работы с формами, это отдельная тема.

Как я узнаю, что готов двигаться дальше?

Оценки в каждом модуле предназначены для проверки ваших знаний по предмету. Завершение оценок подтверждает, что вы готовы перейти к следующему модулю.

Модули

Заставить Интернет работать для всех

Время выполнения: 60–75 часов

Предварительные требования

Перед тем, как работать с этим разделом, рекомендуется изучить HTML, CSS и JavaScript.Многие методы и передовые практики касаются нескольких технологий.

Как я узнаю, что готов двигаться дальше?

Оценки в каждом модуле предназначены для проверки ваших знаний по предмету. Завершение оценок подтверждает, что вы готовы перейти к следующему модулю.

Модули

Современный инструмент

Время выполнения: 55–90 часов

Предварительные требования

Перед тем, как работать с этим разделом, рекомендуется изучить HTML, CSS и JavaScript, поскольку обсуждаемые инструменты работают вместе со многими из этих технологий.

Как я узнаю, что готов двигаться дальше?

В этом наборе модулей нет специальных статей по оценке. Учебные материалы по практическим примерам в конце второго и третьего модулей подготовят вас к пониманию основ современных инструментов.

Модули
.

Смотрите также