Нарисовать 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;
}