21xrx.com
2024-12-22 20:06:12 Sunday
登录
文章检索 我的文章 写文章
C++实现爱心图案
2023-07-06 19:11:18 深夜i     --     --
C++ 爱心图案 实现

C++是一种强大的编程语言,可以用来实现许多有趣的图形和图案。其中一个很受欢迎的图案是爱心,下面是使用C++实现爱心图案的方法。

首先,我们需要使用一个绘图库来绘制图形。在这个例子中,我们将使用SFML(Simple and Fast Multimedia Library)库。SFML是一个开源且跨平台的多媒体库,它提供了许多功能,如绘图、动画、音频、窗口管理等。

在代码中,我们需要先引入SFML库,然后创建一个窗口。接下来,我们需要定义一个函数来绘制爱心。这个函数需要接受窗口对象和两个点的坐标作为参数。其中,两个点的坐标可以决定爱心的位置和大小。

绘制爱心的方法是使用一系列的线段和弧线来构成。具体来说,我们可以使用圆弧函数来绘制两个半圆,然后使用直线函数连接两个半圆的底部,最后再绘制一个小圆形作为爱心的顶部。

在函数中,我们需要计算出半圆的半径和圆心位置以及爱心的底部位置。我们可以使用初中数学中的勾股定理和三角函数来计算这些值。

最后,我们在主函数中调用绘制函数,传递窗口对象和两个点的坐标。这样,我们就可以在屏幕上看到一个漂亮的爱心图案了。

下面是实现爱心图案的代码:


#include <SFML/Graphics.hpp>

#include <cmath>

const double PI = 3.14159265358979;

void drawHeart(sf::RenderWindow& window, sf::Vector2f pos, float size)

{

  float xRadius = size * 0.5;

  float yRadius = size * 0.4;

  sf::CircleShape leftCircle(xRadius);

  leftCircle.setOrigin(xRadius, 0);

  leftCircle.setPosition(pos);

  leftCircle.setFillColor(sf::Color::Red);

  sf::CircleShape rightCircle(xRadius);

  rightCircle.setOrigin(0, 0);

  rightCircle.setPosition(pos.x + xRadius, pos.y);

  rightCircle.setFillColor(sf::Color::Red);

  const int numPoints = 50;

  sf::ConvexShape triangle(numPoints);

  triangle.setFillColor(sf::Color::Red);

  float x, y;

  for (int i = 0; i < numPoints; ++i)

  {

    float angle = i * 2 * PI / numPoints - PI / 2;

    if (angle < - PI / 4 || angle > PI / 4)

    {

      x = xRadius * cos(angle);

      y = yRadius * sin(angle);

    }

    else

    {

      x = xRadius * sqrt(2) / 2 + xRadius / 2 * cos(angle);

      y = yRadius * sqrt(2) / 2 - xRadius / 2 * sin(angle);

    }

    triangle.setPoint(i, sf::Vector2f(x, y));

  }

  float bottomX = pos.x + size / 2;

  float bottomY = pos.y + size * 0.8;

  sf::CircleShape bottomCircle(size * 0.15);

  bottomCircle.setPosition(bottomX - size * 0.075, bottomY - size * 0.15);

  bottomCircle.setFillColor(sf::Color::Red);

  sf::RectangleShape bottomRect(sf::Vector2f(size * 0.15, size * 0.5));

  bottomRect.setPosition(bottomX - size * 0.075, bottomY);

  bottomRect.setFillColor(sf::Color::Red);

  window.draw(leftCircle);

  window.draw(rightCircle);

  window.draw(triangle);

  window.draw(bottomCircle);

  window.draw(bottomRect);

}

int main()

{

  sf::RenderWindow window(sf::VideoMode(400, 400), "Heart");

  while (window.isOpen())

  {

    sf::Event event;

    while (window.pollEvent(event))

    {

      if (event.type == sf::Event::Closed)

      {

        window.close();

      }

    }

    window.clear();

    drawHeart(window, sf::Vector2f(200, 200), 200);

    window.display();

  }

  return 0;

}

运行程序后,我们就可以在屏幕上看到一个漂亮的爱心图案了。通过微调两个点的坐标和大小,我们可以创建不同样式和大小的爱心图案。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复