Помощь с курсовой. Вложенные треугольники.
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Для курсовой( C++ Builder) нужно написать программу "Вложенные треугольники с закругленными углами"..Помогите пожалуйста
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Помогите или напишите? Помогать готов, писать нет.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Romeo писал(а):Помогите или напишите? Помогать готов, писать нет.
Помочь написать.Проблема в том что я не работала в с++, а только в паскале..и вообще не могу представить эту картинку
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Что-то типа этого? Прошу не бить за кривость рисунка: набросал на скорую руку в mspaint.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Romeo писал(а):Что-то типа этого? Прошу не бить за кривость рисунка: набросал на скорую руку в mspaint.
Ой мамочки, скорее всего да..Т.е надо еще будет координаты указывать ?
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
А научный руководитель вообще никаких указаний не дал? Только тему?
Ну вообще, это даже хорошо. Значит можно сделать так, как сам это видишь. Можно не задавать координаты, можно всё захардкодить: и размеры и количество треугльников и радиус скругления вершин.
Теперь о том, как делать само скругление. Предлагаю следующий вариант.
1. Берёшь, бумажку, рисуешь на ней равносторонний треугольник.
2. Во внутренний угол треугольника вписываешь маленькую окружность так, чтобы она касалась двух сторон, образующих угол.
3. Делая несложные дополнительные построения вычисляешь длину кусочков сторон треугольник от угла, до точек касания с окружностью (эти кусочки не станем рисовать) и координаты центра окружности. Всё нужно выразить через a - сторону треугльника и r - радиус окружности.
4. Всё это проделываешь с каждой вершиной треугольника.
5. Затем рассчитываешь координаты отрезков (частей каждой стороны треугольника), которые соединят окружности точки касания окружностей, установленных в вершинах.
6. Затем рассчитываешь значения углов начала и конца дуг, лежащих между точек касания (либо координаты точек касания, всё зависит от того, что требует графическая функция, рисующая дугу).
7. Последняя хитрость - делаем r зависимым от a, чтобы при уменьшении размера треугольника скругления тоже уменьшались, иначе в случае маленького треугольника скругления поглотит почти всю сторону. Скажем r = a/20.
Всё это оформляем как отдельную функцию, которая рисует треугольник. Функция должна получать точку центра треугльника и длину стороны. Всё остальные у нас будет посчитано относительно этих двух величин, так что нарисовать скргулённый треугльник не будет проблемы.
Как ты догадалась, последний шаг уже прост. Нужно в цикле вызвать нашу функцию несколько раз, передав одни и те же координаты в качестве центра треугольника, и уменьшая длину стороны на каждой следующей итерации.
Прикрепляю разъясняющий рисунок прорисовки одного из углов. Красным отмечена видимая часть. Чёрные части должны быть скрыты.
Ну вообще, это даже хорошо. Значит можно сделать так, как сам это видишь. Можно не задавать координаты, можно всё захардкодить: и размеры и количество треугльников и радиус скругления вершин.
Теперь о том, как делать само скругление. Предлагаю следующий вариант.
1. Берёшь, бумажку, рисуешь на ней равносторонний треугольник.
2. Во внутренний угол треугольника вписываешь маленькую окружность так, чтобы она касалась двух сторон, образующих угол.
3. Делая несложные дополнительные построения вычисляешь длину кусочков сторон треугольник от угла, до точек касания с окружностью (эти кусочки не станем рисовать) и координаты центра окружности. Всё нужно выразить через a - сторону треугльника и r - радиус окружности.
4. Всё это проделываешь с каждой вершиной треугольника.
5. Затем рассчитываешь координаты отрезков (частей каждой стороны треугольника), которые соединят окружности точки касания окружностей, установленных в вершинах.
6. Затем рассчитываешь значения углов начала и конца дуг, лежащих между точек касания (либо координаты точек касания, всё зависит от того, что требует графическая функция, рисующая дугу).
7. Последняя хитрость - делаем r зависимым от a, чтобы при уменьшении размера треугольника скругления тоже уменьшались, иначе в случае маленького треугольника скругления поглотит почти всю сторону. Скажем r = a/20.
Всё это оформляем как отдельную функцию, которая рисует треугольник. Функция должна получать точку центра треугльника и длину стороны. Всё остальные у нас будет посчитано относительно этих двух величин, так что нарисовать скргулённый треугльник не будет проблемы.
Как ты догадалась, последний шаг уже прост. Нужно в цикле вызвать нашу функцию несколько раз, передав одни и те же координаты в качестве центра треугольника, и уменьшая длину стороны на каждой следующей итерации.
Прикрепляю разъясняющий рисунок прорисовки одного из углов. Красным отмечена видимая часть. Чёрные части должны быть скрыты.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
К сожалению не дал рекомендаций. А с остальными треугольниками так же делать? И вот еще вопрос с чего начинать программу.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Остальные треугольники нарисуются благодаря многократному вызову функции, рисующей один треугольник. Ещё раз прочти внимательно вот это:kthrj писал(а): А с остальными треугольниками так же делать?
Romeo писал(а): Как ты догадалась, последний шаг уже прост. Нужно в цикле вызвать нашу функцию несколько раз, передав одни и те же координаты в качестве центра треугольника, и уменьшая длину стороны на каждой следующей итерации.
В каком смысле с чего начинать? Ты не писала ещё на С++ даже Hello world? Или я вопрос не понял? А то сейчас сюда Hello world напишу, а ты обидишься.kthrj писал(а): И вот еще вопрос с чего начинать программу.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Нет, я вообще не работалА в С++.В этом и проблема
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Ну вот вариант Hello world.
Для того, чтобы рассказать, как с графикой работать, придётся узнать какой компилятор и под чем будешь компилировать программу.
А вообще, чтобы разобраться с азами синтаксиса проще всего будет открыть любую простенькую методичку, коих в интернете пруд-пруди и полистать её.
Код: Выделить всё
#include <iostream>
#include <string>
int main()
{
std::string strUser;
std::cout << "Enter your name: ";
std::cin >> strUser;
std::cout << "Hello, " << strUser << std::endl;
return 0;
}
А вообще, чтобы разобраться с азами синтаксиса проще всего будет открыть любую простенькую методичку, коих в интернете пруд-пруди и полистать её.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.