Нарисовать 2 треугольника, один внутри другого, чтобы они образовывали рисунок — звезду давида - C (СИ)
Формулировка задачи:
Помогите с кодом, как можно нарисовать 2 треугольника, один внутри другого что бы они образовывали рисунок - звезду давида. треугольники равносторонние. Кто справится с задачей, обещаю вознаграждение!
Это один треугольник, надо ещё один внутри него, доработать алгоритм...
#include <stdio.h> #include <conio.h> #include <math.h> void main() { int a,i,j,k,f,t; do { do { printf("Enter number\n"); scanf("%d",&a); } while((!a%2)||(a>50)||(a<0)); for(i=0,k=1;i<a;i+=2,k+=2) { for(j=i;j<a;j+=2) { printf(" "); } for(j=0;j<k;j++) { if((j==0)||(k-j==1)||(a-i==2)||(a-i==1)) printf("*"); else printf(" "); } printf("\n"); } } while(getch()!=27); }
Решение задачи: «Нарисовать 2 треугольника, один внутри другого, чтобы они образовывали рисунок — звезду давида»
textual
Листинг программы
#include <stdio.h> #include <math.h> #include <windows.h> const double PI = 3.14; // отступы const int xOffset = 5; const int yOffset = 20; struct Point { double x, y; }; // целевая точка size_t targetPoint(size_t idx, size_t limit); // рисуем void paintFigure(struct Point * points, size_t size); // ввод стороны int inputSide(); int main() { const size_t numPoints = 6; // углы double alpha = 120 * PI / 180; double beta = 30 * PI / 180; size_t i; int side = inputSide(); // радиус описанной откружности double radius = side * sin(alpha) / sin(beta); // приблизительное количество строк size_t lines = (size_t)floor(radius / 4.9); // координаты центра const double centerX = radius + xOffset; const double centerY = radius + yOffset; // посчитаем координаты точек double angle = 2 * PI / numPoints; struct Point points[numPoints]; for(i = 0; i < numPoints; ++i) { points[i].x = centerX + radius * sin(i * angle); points[i].y = centerY + radius * cos(i * angle); } //рисуем paintFigure(points, numPoints); for(i = 0; i < lines; ++i) { printf("\n"); } return 0; } size_t targetPoint(size_t idx, size_t limit) { return (idx += 2) >= limit ? idx - limit : idx; } void paintFigure(struct Point * points, size_t size) { size_t idx; HDC hDC = GetDC(GetConsoleWindow()); HPEN Pen = CreatePen(PS_SOLID, 2, RGB(255, 255, 255)); SelectObject(hDC, Pen); for(idx = 0; idx < size; ++idx) { size_t toIdx = targetPoint(idx, size); MoveToEx(hDC, points[idx].x, points[idx].y, NULL); LineTo(hDC, points[toIdx].x, points[toIdx].y); } DeleteObject(Pen); } int inputSide() { int side; printf("Enter side of hexagram: "); scanf("%d", &side); return side; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д