繁体   English   中英

我的C ++代码有什么问题?

[英]What's wrong with my C++ code?

我试图创建一个输出到控制台的等边三角形,但是我的代码似乎在点0,0输出该三角形。

我怎样才能解决这个问题?

这就是我所拥有的:

头文件:

#include "shape.h"
#include "vertex.h"
#include <list>

// An equilateral triangle
class Triangle : public Shape
{ 
    // the radius provides the length of a side
    // and enables a vertex to be plotted from
    // which the other two vertices can be derived
    // via rotation
    int radius;
public:
    // constructor
    Triangle(Vertex point, int radius = 10);

    // calculates and returns a triangle's area
    int area();

    // calculates and returns a triangle's perimeter
    int perimeter();
};

和cpp文件

#include "triangle.h"
#include "vertex.h"
#include <list>

Triangle::Triangle(Vertex point, int radius) : Shape(point)
{
    this->radius = radius;

    this->centroid = Vertex(0,0); 
    vertices.push_back(Vertex(centroid.getY() + radius));
    vertices.push_back(Vertex(centroid.getY() + (radius*2)));
    vertices.push_back(Vertex(centroid.getX() * cos(120) - centroid.getY() * sin(120),centroid.getY() * cos(120) + centroid.getX() * sin(120)));
    vertices.push_back(Vertex(centroid.getX() * cos(240) - centroid.getY() * sin(240),centroid.getY() * cos(240) + centroid.getX() * sin(240)));

    this->centroid = point;
}

// returns the area of an equilateral triangle
int Triangle::area()
{
    return radius*radius*(sqrt(3)/4);
}

// returns the perimeter of an equilateral triangle
int Triangle::perimeter()
{
    return radius *3;
}

我不确定这是怎么回事。 我尝试了许多不同的方法来修复它,但是这样做并没有运气。 有人可以帮忙吗?

sincos等使用弧度而不是度。

同样,您将质心设置为硬编码0,0

正如在另一个答案中指出的那样, sincos用弧度而不是度来表示他们的论点。
此外,您的构造函数似乎很奇怪。 请记住,我没有代码的所有详细信息( VertexShape ,...),但是假设vertices需要包含三角形的三个顶点,并且Vertex的构造函数采用了三个坐标,我会尝试这样的事情:

Triangle::Triangle(Vertex point, int radius) : Shape(point)
{
    this->radius = radius;
    // in any case, you want the traingle to be centered around the point given as input
    this->centroid = point;

// we can just avoid calling trigonometric functions at runtime
// also, the values for these particular angles are well-known, so we don't need to call any actual trigonometric functions
    static const float COS_60 = 0.5f;
    static const float COS_30 = 0.5f * sqrt(3.f);

    // compute the length of the side of the triangle based on its radius
    // for instance, using any of the six right triangles between the center, a vertice and the projection of the center against one of the sides
    const float side = radius * 2.f * COS_30;
    // more basic geometry
    const float bottomHeight = point.getY() - COS_60 * radius;

    // first vertice is right above the center
    this->vertices.push_back(Vertex(point.getX(), point.getY() + radius));
    // second vertice is at the bottom height, and its X position is offset by half the side
    this->vertices.push_back(Vertex(point.getX() + COS_60 * side, bottomHeight));
    // same, but in the other direction
    this->vertices.push_back(Vertex(point.getX() - COS_60 * side, bottomHeight));

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM