Как создать бинарный файл в блокноте
Перейти к содержимому

Как создать бинарный файл в блокноте

  • автор:

Работа с файлами

Любая программа, которая выполняется на компьютере пользователя скорее всего взаимодействует с файловой системой: умеет открывать файлы, сохранять их в своих форматах, возможно, хранит в файлах настройки.

Сегодня наши программы тоже смогут так делать!

Что такое файл?

До этого момента вся информация, с которой мы работали, хранилась исключительно в оперативной памяти — в переменных.

Но информация из оперативной пропадает при закрытии программы или перезагрузке компьютера. Что делать с данными, которые нужно хранить между запусками? Единственное решение — это хранить данные на энергонезависимом носителе — жестком диске (HDD) или твердотельном накопителе (SSD). Далее будет использоваться термин жесткий диск, хотя подразумевается любое из этих устройств.

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

Также, как и переменные, файлы занимают какое-то место, их размер измеряется в байтах.

Способ организации и хранения файлов на диске называется файловой системой.

Текстовые и бинарные файлы

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

В текстовых файлах хранятся текстовые данные. В зависимости от кодировки каждый символ кодируется равным числом байт.

Текстовые файлы могут иметь произвольные расширения, вам, возможно встречались .txt, .py, .html.

Текстовые файлы можно открыть в текстовом редакторе, например, в блокноте.

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

Как интерпретировать ту или иную группу байт в файле, нам говорит формат файла. Примеры бинарных файлов: .exe, .doc, .dll и тд..

Если открыть бинарный файл в блокноте, вы увидите много страшных символов — компьютер попытается интерпретировать все данные в файле как буквы.

Создаем текстовый файл

При работе с файлами всегда используется следующий алгоритм:

  • открытие файла
  • изменение или чтение файла
  • закрытие файла

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

Чтобы открыть файл, в питоне используется функция open(path, mode) , которая принимает путь к файлу (абсолютный или относительный) и режим. Режим — это либо чтение (read), либо запись (write), либо добавление в конец файла (append).

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

Давайте создадим текстовый файл и запишем туда небольшой текст:

file = open('new.txt', 'w') # открываем файл new.txt для записи (w) file.write("hello world! :)") # записываем строку в файл file.close() # закрываем файл

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

После выполнения программы, в папке с кодом должен появиться новый файл new.txt, а в нем — строка «hello world».

Читаем текстовый файл

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

file = open('smiles.txt', 'r') # открываем файл smiles.txt для чтения (r) text = file.read() # считываем все содержимое файла в переменную file.close() print(text[:100])

Файл smiles.txt можно скачать тут.

Используем with

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

Пример:

with open('smiles.txt', 'r') as file: text = file.read() # файл автоматически закрылся print(text[:100])

Двоичные файлы. Бинарный файл

Рассматриваемые нами до этого времени примеры демонстрировали форматированный ввод/вывод информации в файлы. Форматированный файловый ввод/вывод чисел целесообразно использовать только при их небольшой величине и малом количестве, а также при необходимости обеспечения возможности просмотра файлов не программными средствами. В противном случае, конечно, гораздо эффективнее использовать двоичный ввод/вывод, при котором числа хранятся таким же образом, как в ОП компьютера, а не в виде символьных строк. Напомню, что целочисленное (int) или вещественное (float) значение занимает в памяти 4 байта, значение типа double – 8 байт, а символьное значение типа char — 1 байт. Например, число 12345 в текстовом (форматированном) файле занимает 5 байт, а в бинарном файле – 4 байта.

Бинарные файлы , т.е. файлы, в которых информация хранится во внутренней форме представления, применяются для последующего использования программными средствами, их невозможно просматривать не программными средствами. Преимущество бинарных файлов состоит в том, что, во-первых, при чтении/записи не тратится время на преобразование данных из символьной формы представления во внутреннюю и обратно, а во-вторых, при этом не происходит потери точности вещественных чисел. Как в случае форматированного ввода/вывода, так и в случае бинарного ввода/вывода для «правильной» обработки информации из файла необходимо знать какие типы данных, каким образом и в какой последовательности записаны в бинарный файл, тем более, что просмотр бинарного файла с помощью текстового редактора ничего не даст.

Рассмотрим пример, демонстрирующий запись целочисленных элементов динамического массива в бинарный файл и чтение их из данного файла.

using namespace std;

int *mas = new int [N];

cout (mas), N*sizeof(int)); //запись массива в файл

fout.close(); //закрытие потока

cout (mas), N*sizeof(int)); //считывание массива из файла

for(i=0; i , который преобразует буфер наших данных типа int (mas) в буфер типа char.

Необходимо помнить, что приведение типа с помощью оператора reinterpret_cast необходимо только в тех случаях, когда первый параметр функций write() и read() не является символьным массивом (ведь символ типа char занимает только 1 байт). Кроме того, если необходимо записать или прочитать не массив, а отдельные переменные, то нужно использовать ссылочный механизм (ссылку на адрес буфера данных), например:

ofstream fout(filename, ios::app | ios::binary);

Теперь необходимо обсудить второй параметр рассматриваемых функций. В данной программе, в качестве второго параметра мы использовали выражение N*sizeof(int), с помощью которого вычислили количество байт. Например, если у нас 5 целочисленных элементов массива, то число байт будет равно 20. Функция sizeof() возвращает количество байт, отводимое под указанный в качестве параметра тип данных. Например, sizeof(int ) вернёт 4.

Итак, приведённая в этом примере программа позволяет записать в файл bin.dat данные в бинарном виде и считывать их из этого бинарного файла. Причём после считывания эти данные приводятся к типу int, приобретают структуру массива и с ними можно производить любые операции.

Теперь, представим себе, что необходимо написать программу позволяющую считывать данные из файла bin.dat, причём мы знаем только то, что в данном файле записаны элементы целочисленного массива в бинарном виде. Количество записанных элементов (N) нам не известно . При создании программы мы не имеем права использовать константный массив, т.е. выделять память под него на этапе создания программы. Это приведет к ошибочному результату. Поскольку слишком малое значение N приведёт к тому, что считаются не все элементы массива, а слишком большое значение N приведёт к заполнению лишних ячеек случайными значениями.

Рассмотрим, пример программы, позволяющей считывать из бинарного файла элементы целочисленного массива, путём динамического выделения памяти, и для доказательства реалистичности считынных данных вычислять их сумму.

using namespace std;

int N, i, sum=0, dfb; //dfb — длина файла в байтах

ifstream fin(«c:\\os\\bin.dat», ios::binary );

cout Вариантная часть

Бинарные файлы

Бинарные файлы хранят информацию в том виде, в каком она представлена в памяти компьютера, и потому неудобны для человека. Заглянув в такой файл, невозможно понять, что в нем записано; его нельзя создавать или исправлять вручную — в каком-нибудь текстовом редакторе — и т.п. Однако все эти неудобства компенсируются скоростью работы с данными.

Кроме того, текстовые файлы относятся к структурам последовательного доступа, а бинарные — прямого. Это означает, что в любой момент времени можно обратиться к любому, а не только к текущему элементубинарного файла .

Типизированные файлы

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

то придется написать следующий код:

c: char; i,j,min,max: integer;

begin assign(f,input); reset(f);

for i:=1 to 100 do if not eof(f)

then with a[i] do

begin readln(f,name,price,min,max); age:=;

for j:= min to max do age:=age+[j];

Как видим, такое поэлементное считывание весьма неудобно и трудоемко.

Выход из этой ситуации предлагают типизированные файлы — их элементы могут относиться к любому базовому или структурированному типу данных. Единственное ограничение: все элементы должны быть одного и того же типа. Это кажущееся неудобство является

непременным условием для организации прямого доступа к элементам бинарного файла : как и в случае массивов, если точно известна длина каждого компонента структуры, то адрес любого компонента может быть вычислен по очень простой формуле:

Описание типизированных файлов

В разделе var файловые переменные, предназначенные для работы с типизированными файлами , описываются следующим образом:

Никакая файловая переменная не может быть задана константой.

Назначение типизированного файла

С этого момента и до конца раздела под словом «файл» мы будем подразумевать » бинарный типизированный файл » (разумеется, если специально не оговорено иное).

Команда assign(f,» «); служит для установления связи между файловой переменнойf и именем того файла, за работу с которым эта переменная будет отвечать.

Строка » » может содержать полный путь к файлу. Если путь не указан, файл считается расположенным в той же директории, что и исполняемый модуль программы.

Открытие и закрытие типизированного файла

В зависимости от того, какие действия ваша программа собирается производить с открываемым файлом, возможно двоякое его открытие:

reset(f); — открытие файла для считывания из него информации и одновременно длязаписи в него (если такого файла не существует, попытка открытия вызовет ошибку). Эта же команда служит для возвращения указателя на начало файла;

rewrite(f); — открытие файла длязаписи в него информации; если такого файла не существует, он будет создан; если файл с таким именем уже есть, вся содержавшаяся в нем ранее информация исчезнет.

Закрываются типизированные файлы процедуройclose(f) , общей для всех типов файлов.

Считывание из типизированного файла

Чтение из файла, открытого для считывания, производится с помощью команды read() . В скобках сначала указывается имя файловой переменной, а затем — список ввода1) :

Вводить из файла можно только переменные соответствующего объявлению типа, но этот тип данных может быть и структурированным. Cкажем, если вернуться к примеру, приведенному в начале п. » Типизированные файлы «, то станет очевидным, что использование типизированного файла вместо текстового позволит значительно сократить текст программы:

type toy = record name: string; price: real;

var f: file of toy;

a: array of toy; begin

for i:=1 to 100 do

if not eof(f) then read(f,a[i]); close(f);

Поиск в типизированном файле

Уже знакомая нам функция eof(f:file):boolean сообщает о достигнутом конце файла. Все остальные функции «поиска конца» (eoln() ,seekeof() иseekeoln() ), свойственные текстовым файлам, нельзя применять к файламтипизированным .

Зато существуют специальные подпрограммы, которые позволяют работать с типизированными файлами как со структурами прямого доступа:

1. Функция filepos(f:file):longint сообщит текущее положение указателя в файлеf . Если он указывает на самый конец файла, содержащегоN элементов, то эта функция выдаст результатN . Это легко объяснимо: элементы файла нумеруются начиная с нуля, поэтому последний элемент имеет номер N-1 . А номерN принадлежит, таким образом, «несуществующему» элементу — признаку конца файла.

2. Функция filesize(f:file):longint вычислит длину файлаf .

3. Процедура seek(f:file,n:longint) передвинет указатель в файлеf на началозаписи с номеромN . Если окажется, чтоn больше фактической длины файла, то указатель будет передвинут и за реальный конец файла.

4. Процедура truncate(f:file) обрежет «хвост» файлаf : все элементы начиная с текущего и до конца файла будут из него удалены. На самом же деле произойдет лишь переписывание признака «конец файла» в то место, куда указывал указатель, а физически «отрезанные» значения останутся на прежних местах — просто они станут «бесхозными».

Запись в типизированный файл

Сохранять переменные в файл, открытый для записи , можно при помощи командыwrite() . Так же как и в случае считывания, первой указывается файловая переменная, а за ней — список вывода:

write(f,a,b,c); — записать в файлf (предварительно открытый длязаписи командамиrewrite(f) илиreset(f) ) переменныеa ,b ,c .

Выводить в типизированный файл можно только переменные соответствующего описанию типа данных. Неименованные и нетипизированные константы нельзя выводить в

Типизированные файлы рассматриваются как структуры одновременно и прямого, и последовательного доступа. Это означает, чтозапись возможна не только в самый конец файла, но и в любой другой его элемент. Записываемое значение заместит предыдущее значение в этом элементе (старое значение будет «затерто»).

Например, если нужно заместить пятый элемент файла значением, хранящимся в переменной а , то следует написать следующий отрывок программы:

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

Вам понадобится
  • — программа Hex Edit.
Инструкция

Вероятно, вы уже встречали понятия «текстовый» и «бинарный», читая какие-нибудь статьи о файлах . И решили, что всё это для вас слишком сложно, вовек не разобраться, поэтому не стали вникать, махнув на это рукой.

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

Немного теории

Текстовый файл содержит в себе символы ASCII (аббревиатура расшифровывается как American Standard Code for Information Interchange, что-то вроде «американский стандарт кодировки для обмена информацией »).

Фактически ASCII — это таблица, в которой каждой букве, цифре, знаку пунктуации и разным «собакам» со «снежинками» (в смысле, @ и *) выделено по одному байту. То бишь, по восемь нулей и единиц (бит) . Плюс, конечно, управляющие символы вроде перехода к новой строке.

Программа для открытия файлов с символами ASCII преобразовывает байты в буквы, цифры и прочие печатные знаки на дисплее . Конечно, софт должен понимать ту часть таблицы, которая соответствует русскому языку, но это уже вопрос кодировки.

В бинарном файле нули и единицы выстраиваются в последовательности, которые нужны необязательно для отображения текстов (хотя есть и такие, например, *doc). А для чего же, спросите вы. Ответ прост: для всего остального. Программы, фильмы, музыка, изображения — у каждого формата свои структурные принципы организации данных.

Само слово «бинарный» означает «состоящий из двух компонентов», «двойной». Действительно, чётко определить получается только два компонента — ноль и единицу, биты, «кирпичики», из которых сложен файл. Смысл всего остального может проявляться только во время запуска (открытия, воспроизведения).

Изнанка цифрового мира

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

К примеру, байты изображения в формате JPEG, обычной картинки или фотографии, в окошке редактора будут показаны как FF D8 FF 00 04 3A 29 и так далее.

Специалист поймёт, что последовательность байт FF D8 в самом начале указывает на то, что перед нами — именно JPEG. А неспециалистам всё это не так уж интересно.

В HEX-редакторе можно открыть и текстовый файл, чтобы увидеть, какие байты соответствуют конкретным буквам (символам ASCII). Но только разве что из любопытства, всё равно смысла в этом нет.

А вот бинарные файлы, бывает, просматривают в шестнадцатеричном виде с вполне осмысленно и конкретными целями. Например, специалисты антивирусных лабораторий таким образом ищут вредоносный код, дописанный к основному. Кстати, переходим к вопросам безопасности.

Что способно навредить

Текстовый файл не может содержать ничего, кроме символов ASCII. Однако программы бывают не только бинарными, но и состоящими из вышеуказанных символов. Имеются ввиду скрипты, конечно.

Иными словами, файл *txt не заражается в принципе и угрозы не представляет. А если внутри текстового файла — скрипт, то бед натворить он способен немало.

К примеру, файл *bat содержит код разных команд и запускается двойным кликом, как обычная программа. Написаны те команды символами ASCII, но операционная система умеет их интерпретировать — превращать в такие нули и единицы, какие характерны именно для программ.

Но вы, конечно, не жмёте на неведомые bat-файлы, правда? Вот и хорошо.

Последнее редактирование: 2012-11-06 14:45:16

записей ), то вполне понятно желание как-то сократить неиспользуемый, но занимаемый объем памяти.

Специально для таких случаев существуют записи с вариантной частью .

Описание записи с вариантной частью

В разделе var запись с вариантной частью описывают так:

var : record : ; [ : ;] [. ] case : of : ( : ; : ; . ); : ( : ; : ; . ); [. ] end;

Невариантная часть записи (до ключевого слова case ) подчиняется тем же правилам, что и обычная запись . Вообще говоря, невариантная часть может и вовсе отсутствовать.

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

Пример . Для того чтобы описать содержимое библиотеки, необходима следующая информация:

Графы «Название» и «Издательство» являются общими для всех трех вариантов, а остальные поля зависят от типа печатного издания. Для реализации этой структуры воспользуемся записью с вариантной частью :

type biblio = record name,publisher: string; case item: char of «b»: (author: string; year: 0..2004); «n»: (data: date); «m»: (year: 1700..2004; month: 1..12; number: integer); end;

В зависимости от значения поля item , в записи будет содержаться либо 4, либо 5, либо 6 полей .

Механизм использования записи с вариантной частью

Количество байтов, выделяемых компилятором под запись с вариантной частью , определяется самым «длинным» ее вариантом. Более «короткие» наборы полей из других вариантов занимают лишь некоторую часть выделяемой памяти.

В приведенном выше примере самым «длинным» является вариант » b «: для него требуется 23 байта (21 байт для строки и 2 байта для целого числа). Для вариантов » n » и » m » требуется 4 и 5 байт соответственно (см. таблицу).

name, publisher item Вариантная часть
. «b» author year
. «n» data
. «m» year month number
. «b» author year

Бинарные файлы

Бинарные файлы хранят информацию в том виде, в каком она представлена в памяти компьютера, и потому неудобны для человека. Заглянув в такой файл , невозможно понять, что в нем записано; его нельзя создавать или исправлять вручную — в каком-нибудь текстовом редакторе — и т.п. Однако все эти неудобства компенсируются скоростью работы с данными.

Кроме того, текстовые файлы относятся к структурам последовательного доступа , а бинарные — прямого. Это означает, что в любой момент времени можно обратиться к любому, а не только к текущему элементу

Создать бинарный файл и текстовый файл

Author24 — интернет-сервис помощи студентам

Сконвертировать текстовый файл в бинарный, переписать только положительные числа в другой бинарный файл
Бинарные файлы!! Помогите пожалуйста. Дано бинарный файл ( данные сначала в текстовом, конвертирую.

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

Создать текстовый файл из 5 строк, прочитать созданный файл и получить новый файл согласно своему варианту. Dev C++
8)В новом файле заменить все латинские буквы верхнего регистра на буквы нижнего регистра.

Бинарный файл, как сконвертировать в текстовый
Здравствуйте, кто работал с бинарными файлами , не nодскажете какой нибудь гайд nо работе с ними.

205 / 181 / 112
Регистрация: 15.03.2014
Сообщений: 392
Пример близкий к Вашему.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
#include #include using namespace std; int main() { int a; // открываем файл для записи в бинарном режиме ofstream fileStrmOut( "file.bin", ios::binary ); // в цикле записываем 5 целых чисел в файл // в блокноте открыть и прочитать числа также просто как в варианте с текстовым файлом - не получится for ( int i = 0; i  5; ++i ) { cin >> a; fileStrmOut.write( ( char* ) &a, sizeof(int) ); } // не забываем закрывать файл fileStrmOut.close(); // проверяем что записали в файл путём чтения из него чисел и отображаем их на экране // открываем этот же файл для чтения в бинарном режиме ifstream fileStrmIn( "file.bin", ios::binary ); // в цикле считываем все числа из файла и выводим на экран while ( fileStrmIn.read( ( char * ) &a, sizeof(int) ) ) { cout   <' '; } // закрываем файл fileStrmIn.close(); return 0; }

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Чтение/Запись в текстовый и бинарный файл.
Подскажите в чем ошибка. Функции чтения и записи в бинарный и текстовый файл толком не работают( .

Дан текстовый файл. Создать символьный файл, содержащий все знаки препинания, встретившиеся в текстовом файле
Дан текстовый файл. Создать символьный файл, содержащий все знаки препинания, встретившиеся в.

Или воспользуйтесь поиском по форуму:

STL формат (моделирование в блокнот)

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

Отписаться от уведомлений вы всегда сможете в профиле автора.

Здравствуете уважаемое 3D сообщество. Сегодня немного информации о формате STL.

Этот формат был разработан достаточно давно, специально для создания моделей с последующим выводом их, на аппаратуру ЧПУ. Не будем углубляться в историю, так как этот сайт не википедия. Тем более классический синтаксис со временем претерпел изменения. Разные программы по разному справляются с ними. Некоторые, например Netfabb, не понимают не классический синтаксис.

STL формат (моделирование в блокнот)

А другие, например Blender3D, читают без проблем. Модели в этом формате состоят из треугольников. В прошлом было ограничение на их количество. Из-за чего было ограничение на детализацию модели. Наверное это было связано с мощностями оборудования. Также координаты модели не могли иметь отрицательные значения. Теперь этих ограничений нет. Во всяком случае я с ними не сталкивался. И скорее всего любой принтер справится с любым весом файла модели.

Файл STL содержит описание модели, которое состоит из набора координат трех точек по трем осям. Каждая группа из трех точек образует полигон, в этом формате он называется фасет.

Файл STL может быть текстовым или бинарным. Бинарный файл может нести в себе информацию о цвете модели. Текстовый файл не может этого. Также текстовый файл отличается от бинарного по размеру в большую сторону. Конечно же текстовый файл можно конвертировать в бинарный. Один из самых простых способов сделать это, открыть текстовый файл в любой (подходящей) 3D программе и экспортировать или сохранить его в STL формат. Получившийся файл будет бинарным.

Для того чтобы построить модель, в этом формате, нам нужны координаты ключевых точек. Допусти нам нужен треугольник — фасет с координатами :

STL формат (моделирование в блокнот)

STL формат (моделирование в блокнот)

Порядок описания вершин важен, Так как от этого зависит ориентация нормали. Нумерация выполняется по правилу правой руки.

STL формат (моделирование в блокнот)

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

STL формат (моделирование в блокнот)

STL формат (моделирование в блокнот)

Так как STL достаточно серьезный формат, в нем естественно есть компонент отвечающий за ориентацию нормалей — facet normal n1 n2 n3. Но так как подавляющее большинство использует только правило правой руки, его параметры обычно ровняются нулю (facet normal 0 0 0 ). А для некоторых программ, его наличие вовсе необязательно.

Для демонстрации построим октаэдр. точнее фигуру напоминающую его, потому что не все его ребра будут одинаковой длинны. Октаэдр это две пирамиды соединенные по основанию. Поэтому и моделировать его будем из двух пирамид. Пирамида, если смотреть на нее сверху вниз, представляет из себя четыре прямоугольника вершины которых соединены в одной точке.

STL формат (моделирование в блокнот)

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

STL формат (моделирование в блокнот)

Результат получаем следующий.

STL формат (моделирование в блокнот)

Получился квадрат. Потому что центральная точка имеет такую же координату Z как и другие, исправим это. Ниже правильный листинг файла:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *