轴的类平方发现

时间:2019-05-28 04:03:56

标签: c++

我正试图找出如何找到类Square的轴的轴,如下所示?但是我已经尝试了几个小时,但仍然没有解决。具有高水平专业知识的人可以向我展示这样做的绳索吗?因为main()中的中心函数调用和轴函数调用的确调用相同的x()和y(),因此使我陷入混乱的状态。我知道从圆形继承正方形是很奇怪的。但这是我学校想要的。注意:Main()无法修改!谢谢!

输出:

Square ::轴测试失败

8.87627 0.284967

3.82567 0.958537

通过测试:50%

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>


class Object
{
public:

private:
    float d;

public:
    Object(float n) : d(n){}
    Object(){}
    float depth() const
    {
        return d;
    }

    struct PointType
    {
        float x2;
        float y2;
        PointType( float x1,  float y1) :x2(x1),y2(y1){}
        PointType(){}
        float x()
        {
            return x2;
        }
        float y()
        {
            return y2;
        }
        PointType center()
        {
            return *this;
        }

    };
    struct VectorType
    {
        float tx;
        float ty;
        VectorType( float tx1,  float ty1) :tx(tx1),ty(ty1){}
        VectorType(  ){}
    };

    virtual ~Object()
    {}
};
class Point :public Object 
{

private:
    PointType mpoint;

public:

    Point(const PointType& pt, float& y1) :Object(y1), mpoint(pt) {}
    Point(const PointType& pt):mpoint(pt){}
    Point(){}

     Point center() const
    {
         return *this;
    }
     float x()
    {
        return mpoint.x2;

    }
     float y()
    {
        return mpoint.y2;
    }

    virtual ~Point(){}

};
class Circle : public Point 
{ 
    private:
    Object::PointType m_pt;
    float r;
    public:  

    Circle(const PointType pts, float rad, float dep) 
    : Point(m_pt,dep),m_pt(pts),r(rad) {}

    Circle(const PointType pts, float rad):m_pt(pts),r(rad){}

    Circle(){}

    float radius() const
    {
        return r;
    }

    Circle center() const
    {
        return *this;   

    };
     float x()
    {
        return m_pt.x2;

    }
      float y()
    {
        return m_pt.y2;
    }


 };
class Square: public Circle 
{
    private:
    Object::PointType s_pt;
    Object::VectorType v_pt;
    float a=getRadius();

    public:
    Square(const PointType spts,const VectorType vpts,float depth) :
    Circle(spts,a,depth),s_pt(spts),v_pt(vpts){}

    Square(const Object::PointType& spts, const VectorType vpts):s_pt(spts),v_pt(vpts){}

    Square axis() const
    {
        return Square(s_pt,v_pt,getRadius());
    }
    Square center() const
    {
         return *this;
    }

    float radius() const
    {
          return a;
    }
    float getRadius() const
    {
        float rad= sqrt(v_pt.tx * v_pt.tx + v_pt.ty * v_pt.ty); 

        return rad;
    }
    float x() const
    {
        return s_pt.x2;
        // v_pt.tx/radius();
    }
    float y() const

    {
        return s_pt.y2;
        // v_pt.ty/radius();
    }

};

const float EPSILON = 1e-5f;

bool is_near(float x, float y)
{
    return std::abs(x - y) < EPSILON;
}

float frand()
{
    return 10.0f * float(rand()) / float(RAND_MAX);
}

int main()
{
    srand(unsigned(time(0)));
    int count = 0;
    int max_count = 0;

    float x = frand();
    float y = frand();
    float sx = frand();
    float sy = frand();
    float depth = frand();
    Square square(Square::PointType(x, y), Square::VectorType(sx, sy), depth);

    if (is_near(square.center().x(), x) &&
        is_near(square.center().y(), y))
    {
        ++count;
    }
    else
    {
        std::cout << "  - Square::center test failed" << std::endl;
    }

    ++max_count;

    float radius = std::sqrt(sx * sx + sy * sy);
    if (is_near(square.axis().x(), sx / radius) &&
        is_near(square.axis().y(), sy / radius))
    {
        ++count;
    }
    else
    {
        std::cout << "  - Square::axis test failed" << std::endl;
    }
    ++max_count;
    std::cout << square.axis().x()<< " " << sx / radius<<std::endl;
        std::cout << square.axis().y()<< " " <<  sy / radius<<std::endl;
    int result = static_cast<int>(
        100.0f * static_cast<float>(count) / static_cast<float>(max_count) + 0.5f
    );
    std::cout << "Tests passed: " << result << "%" << std::endl;
    return result;
}

0 个答案:

没有答案