Проекция массива |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Проекция массива |
Merhaba |
1.05.2011 21:34
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Мужской Репутация: 0 |
Добрый Вечер!!!
Помогите Пожалуйста решить задачу: В трехмерном массиве размерностью m*n*l , состоящим из нулей и единиц, хранится изображение(сеточное)некоторого трехмерного тела. Получить двумерный массив - его проекцию(тень) на любое выбранное направление. Я думаю, что: 1. В 3D координатах рисуем кубик, представляющий исхдный массив (если размерности не равны, то кубик кубиком уже не будет, но это к делу не относится). 2. Рисуем плоскость проекции. 3. Разбиваем плоскость на "пиксели", соответствующие элементам получаемого массива-проекции, т.е. на квадратики. 4. Проецируем на плоскость все элементы массива. Если в любую точку "пикселя" падает проекция хоть одной единицы - элементу массива-проекции присваиваем единицу. Если только нули - ноль. Помогите Пожалуйста написать код) |
Lapp |
2.05.2011 3:59
Сообщение
#2
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Помогите Пожалуйста написать код) Мы обязательно поможем. Но ты хотя бы начни. Мысли у тебя в целом верные. Как я понял, пункты 1-3 относятся к тому, как занести тело в трехмерный массив. Это - отдельная задача, и она может оказаться намного сложнее, чем рисовать проекцию. Все зависит от того, как поджодить к интерфейсу. Но даже в простейщем варианте она ненамного проще проецирования. Но в том условии, которое ты написал, она просто не стоит. То есть трехмерный массив нужно промто считать заданным. Я не прав? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Merhaba |
2.05.2011 12:02
Сообщение
#3
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Мужской Репутация: 0 |
Мы обязательно поможем. Но ты хотя бы начни. Мысли у тебя в целом верные. Как я понял, пункты 1-3 относятся к тому, как занести тело в трехмерный массив. Это - отдельная задача, и она может оказаться намного сложнее, чем рисовать проекцию. Все зависит от того, как поджодить к интерфейсу. Но даже в простейщем варианте она ненамного проще проецирования. Но в том условии, которое ты написал, она просто не стоит. То есть трехмерный массив нужно промто считать заданным. Я не прав? Да, нужно просто считать заданным.. У меня затруднение вызывает проектирование на любое выбранное направление Var Mas3: Array[1..n,1..n,1..n] of Integer; Перед этим нужно запросить у пользователя n. Организовать три цикла по заполнению массива с помощью генератора целых чисел в диапозоне: 0..1 или так: Type Сообщение отредактировано: Merhaba - 2.05.2011 12:14 |
Lapp |
3.05.2011 9:03
Сообщение
#4
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Перед этим нужно запросить у пользователя n. С этим сам справишься? Только одно НО: нельзя запрашивать у пользователя n, которое входит в определение типа. Либо нужно сделать тип по максимуму (и запрашивать ограничение), либо использовать динамические массивы (что, конечно, предпочтительнее).Организовать три цикла по заполнению массива с помощью генератора целых чисел в диапозоне: 0..1 Цитата У меня затруднение вызывает проектирование на любое выбранное направление Я полагаю, что "любое" означает "любое из трех" на самом деле - то есть параллельно x, y и z.Допустим, изображение находится в массиве a, и ты хочешь получить его проекцию на плоскость xz (то есть, параллельно направлению y). Массив для этой проекции так и назовем: xz. var , мысля, что первый индекс - это x, а второй - z. Тогда сам процесс получения проекции можно организовать примерно так: for x:=1 to n do Ты можешь написать непосредственно три таких куска (меняя только массивы, представляющие плоскость, и индексы). Если хочешь реализовать, как функцию (для большего кпд кода), то нужно будет немного поменять архитектуру данных (либо вставить выбор непосредственно в цикл, что не есть хорошо и красиво). -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Merhaba |
4.05.2011 21:14
Сообщение
#5
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Мужской Репутация: 0 |
С этим сам справишься? Только одно НО: нельзя запрашивать у пользователя n, которое входит в определение типа. Либо нужно сделать тип по максимуму (и запрашивать ограничение), либо использовать динамические массивы (что, конечно, предпочтительнее). Я полагаю, что "любое" означает "любое из трех" на самом деле - то есть параллельно x, y и z. Допустим, изображение находится в массиве a, и ты хочешь получить его проекцию на плоскость xz (то есть, параллельно направлению y). Массив для этой проекции так и назовем: xz. var , мысля, что первый индекс - это x, а второй - z. Тогда сам процесс получения проекции можно организовать примерно так: for x:=1 to n do Ты можешь написать непосредственно три таких куска (меняя только массивы, представляющие плоскость, и индексы). Если хочешь реализовать, как функцию (для большего кпд кода), то нужно будет немного поменять архитектуру данных (либо вставить выбор непосредственно в цикл, что не есть хорошо и красиво). Скажите Пожалуйста, а что " xz[x,z]:= byte(y<=n)" означает? |
Lapp |
4.05.2011 23:36
Сообщение
#6
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Скажите Пожалуйста, а что " xz[x,z]:= byte(y<=n)" означает? Явное преобразование типа. byte(true) = 1 byte(false) = 0 Ты каким компилятором пользуешься? В уродском PascalABC этого, кажется, нет. Короче, это можно заменить вот таким: if y<=n then xz[x,z]:= 1 else xz[x,z]:= 0; -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 30.05.2024 6:02 |