Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Новички в программировании > Паскаль
Регистрация

Восстановить пароль
Повторная активизация e-mail



Ответ
 
Опции темы
Старый 19.12.2016, 14:48   #1
Fairq
 
Регистрация: 19.12.2016
Сообщений: 8
Репутация: 10
По умолчанию Построить букву N в 3D (GraphABC)

Здравствуйте,нужно построить объемную букву N,которая будет меняться от масштаба (h-высота,w-ширина,l-длинна)
Проблема заключается в построении видимых-невидимых линий(линии,которые будет видно в только от масштаба). Если линию не видно,она должна быть пунктирной. Вот буква без видимых-невидимых линий:
Код:

uses GraphABC;
var h,w,l,d,b,c,v: integer;
    P:array of point;
begin
d:=150;        
b:=300;        
{write('Введите высоту буквы N:  h='); read(h); writeln(h);
write('Введите ширину буквы N:  w='); read(w); writeln(w);
write('Введите длину буквы N:  l='); read(l); writeln(l);}
 h:=200;w:=200;l:=200;

c:=round(sqrt(2)*l/6);    //x
v:=round(sqrt(2)*h/6);    //y

//видимые линии N

SetPenWidth(2);
SetLength(P,10);               //N 2D
P[0].X:=d;                     P[0].Y:=b;
P[1].X:=d ;                    P[1].Y:=b-h;
P[2].X:=d+round(w/3) ;         P[2].Y:=b-h;
P[3].X:=d+2*round(w/3) ;       P[3].Y:=b-round(h/2);
P[4].X:=d+2*round(w/3) ;       P[4].Y:=b-h;
P[5].X:=d+w ;                  P[5].Y:=b-h;
P[6].X:=d+w ;                  P[6].Y:=b;
P[7].X:=d+2*round(w/3) ;       P[7].Y:=b;
P[8].X:=d+round(w/3) ;         P[8].Y:=b-round(h/2);
P[9].X:= d+round(w/3);         P[9].Y:=b;
Polygon(P);


SetLength(P,4);                //N 3D
P[0].X:=d;                     P[0].Y:=b-h;
P[1].X:=d+c;                   P[1].Y:=b-h-v;
P[2].X:=d+round(w/3)+c;        P[2].Y:=b-h-v;
P[3].X:=d+round(w/3);          P[3].Y:=b-h;
Polygon(P);
  SetLength(P,4);
  P[0].X:=d+2*round(w/3);                     P[0].Y:=b-h;
  P[1].X:=d+2*round(w/3)+c;                   P[1].Y:=b-h-v;
  P[2].X:=d+w+c;                              P[2].Y:=b-h-v;
  P[3].X:=d+w;                                P[3].Y:=b-h;
  Polygon(P);
SetLength(P,4);
P[0].X:=d+w;              P[0].Y:=b;
P[1].X:=d+w+c;                P[1].Y:=b-v;
P[2].X:=d+w+c;        P[2].Y:=b-h-v;
P[3].X:=d+w;               P[3].Y:=b-h;
Polygon(P);  

//всегда невидимые линии
SetPenStyle(psDash);SetPenWidth(2);
line(d,b,d+c,b-v);
line(d+c,b-v,d+c,b-h-v);
line(d+c,b-v,d+round(w/3),b-v);   
line(d+2*round(w/3),b,d+2*round(w/3)+c,b-v);
line(d+2*round(w/3)+c,b-v,d+w+c,b-v);
line(d+2*round(w/3)+c,b-v,d+2*round(w/3)+c,b-h-v);

end.

Fairq вне форума   Ответить с цитированием
Старый 19.12.2016, 14:50   #2
Fairq
 
Регистрация: 19.12.2016
Сообщений: 8
Репутация: 10
По умолчанию

Fairq вне форума   Ответить с цитированием
Старый 19.12.2016, 20:19   #3
NetSpace
Профессионал
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Адрес: п.Путеец, Печорский р-н
Сообщений: 1,088
Репутация: 305
По умолчанию

а ничё больше в нарисованной букве N не забыл? ещё двух наклонных линий не хватает. и уголка снизу слева
__________________
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума   Ответить с цитированием
Старый 19.12.2016, 20:25   #4
Fairq
 
Регистрация: 19.12.2016
Сообщений: 8
Репутация: 10
По умолчанию

Эти линии не всегда будут видны,т.к. масштаб меняет сам пользователь. Требуется написать условие,чтобы линии отображались корректно(если линию перекрывает какая-то часть буквы,то она должна продолжаться пунктиром)

Последний раз редактировалось Fairq; 19.12.2016 в 20:32.
Fairq вне форума   Ответить с цитированием
Старый 20.12.2016, 11:09   #5
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,163
Репутация: 1843
По умолчанию

Цитата:
Эти линии не всегда будут видны,т.к. масштаб меняет сам пользователь.
Среди этих (вновь добавленных) только одна будет "частично" видимой прочие всегда невидимы. Потому что пропущена еще одна видимая (и тоже частично).
Хотя нет есть еще одна которая будет изредка чуть-чуть видима.

0. вводим(задаем) исходные данные.
1. расчет координат переднего плана.
(мы уже можем что-то нарисовать) ВЕСЬ первый план есть видимые линии.
2. расчет координат второго плана (можно просто как смещение вправо-вниз)
и опять кое-что можно нарисовать. Большая часть второго плана есть всегда невидимые, хотя встречаются и всегда видимые.
К тому же есть линии "глубины", соединяющие соответствующие точки первого и второго плана. они тоже будут как всегда видимые, так и всегда невидимые.

итак остались непонятные линии, то они видны, то нет.
3. расчет точек изменения видимости.
Цитата:
Требуется написать условие,
любая точка "смены" видимости есть пересечение ДВУХ отрезков.
ДВА уравнения НЕпараралельных прямых проходящих через ДВЕ точки каждая.
система из двух уравнений с двумя переменными имеет единственное решение = точка их пересечения.
добавляем ограничения на принадлежность решения (данной точки) ДВУМ отрезкам
получаем
a) ЕСТЬ решение и это ЕСТЬ точка "смены" видимости.
б) НЕТ решения (точка пересечения ВНЕ наших отрезков) и НЕТ точки смены видимости.

http://www.programmersforum.ru/showt...F0%FF%EC%FB%F5
__________________
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.12.2016 в 11:52.
evg_m вне форума   Ответить с цитированием
Старый 20.12.2016, 13:08   #6
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 21,151
Репутация: 4811
По умолчанию

простите, а разве не так буковка должна выглядеть?
risunok_N(3d).gif
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 22.12.2016, 16:13   #7
phomm
personality
Профессионал
 
Аватар для phomm
 
Регистрация: 28.04.2009
Адрес: Тюмень
Сообщений: 2,845
Репутация: 1478

icq: 421049471
skype: phomm-
По умолчанию

Serge, забыл пунктирку между зубчиками внизу.
И изначально на рисунке линия вертикальная третья по счёту справа должна идти сверху только до середины.
phomm вне форума   Ответить с цитированием
Старый 22.12.2016, 16:29   #8
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 21,151
Репутация: 4811
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Serge, забыл пунктирку между зубчиками внизу.
И изначально на рисунке линия вертикальная третья по счёту справа должна идти сверху только до середины.
согласен.

это примерно так:
risunok_N(3d).gif
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 23.12.2016, 18:59   #9
Fairq
 
Регистрация: 19.12.2016
Сообщений: 8
Репутация: 10
По умолчанию

Никак не могу найти точку пересечения прямых AB и CD
координаты точек:
A(d+w/3 +c;b-v-h) B(d+2*w/3 +c;b-h/2-v) C(d+2*w/3 +c;b-h) D(d+2*w/3 +c;b-h-v
остальные линии получились,а здесь система у меня никак не решается
Fairq вне форума   Ответить с цитированием
Старый 23.12.2016, 19:36   #10
Fairq
 
Регистрация: 19.12.2016
Сообщений: 8
Репутация: 10
По умолчанию

y=-(vx/c)+b-h+dv/c +(2vw)/(3c)
y=(3hx)/(2w) -((-2bw+3ch+3dh+3hw+2wv)/(2w))
вот система,Вольфрам не справляется
Fairq вне форума   Ответить с цитированием
Ответ



Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенести последнюю букву в начало слова; удалить из слова первую букву Narsky Помощь студентам 68 03.07.2016 19:54
В произвольном тексте найти и отпечатать слова, содержащие букву i, но не содержащие букву m Zeitgesterz Общие вопросы C/C++ 3 09.12.2014 21:52
GraphABC LittleG Паскаль 19 26.09.2014 12:00
Pascal ABC. В текстовом русскоязычном файле убрать все слова, начинающиеся на букву «а» и одновременно содержащие букву «о» MarsLoveMoon Паскаль 8 25.04.2014 17:03
Разработать две подпрограммы: букву в заглавную и букву в строчную (в т.ч. для русского языка) makzagdon Assembler 1 25.04.2011 08:53




07:39.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru