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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы