void PointsToVector() { QString path; int vetka[6]; qreal angle[6]; int j = 0; m_vector ptv_vector[m_points.size()-1]; QVectorIterator<QPoint> m_pointsiter(m_points); int i=0; QPoint begin,end; end = m_pointsiter.next(); while(m_pointsiter.hasNext()) { begin = end; end = m_pointsiter.next(); ptv_vector[i].x1 = begin.x(); ptv_vector[i].y1 = begin.y(); ptv_vector[i].x2 = end.x(); ptv_vector[i].y2 = end.y(); i++; } for(int i=0; i<m_points.size(); i++) //узнаём рёбра которые выходят из точки if((qAbs(ptv_vector[i].x1 - m_startpoint.x()) < 5) && (qAbs(ptv_vector[i].y1 - m_startpoint.y()) < 5)) { vetka[j] = i; j++; } //Узнаём наклоны рёбер for(int i=0; i<j; i++) { angle[i] = atan(qRound(qAbs(ptv_vector[vetka[i]].x1 - ptv_vector[vetka[i]].x2) /qAbs(ptv_vector[vetka[i]].y1 - ptv_vector[vetka[i]].y2))); } }
C++ (Qt)m_vector ptv_vector[m_points.size()-1];
C++ (Qt)QPoint *ptv_vector = new QPoint[m_points.size()];...delete [] ptv_vector;
struct m_vector { int x1,y1,x2,y2; //bool checked; }; QPoint m_st
C++ (Qt) const float PI = 3.141519f;const float PI2 = PI * 2; struct CEdge { СEdge( int index0 = -1, int index1 = -1, float angle = 0.0f ) { mIndex[0] = index0; mIndex[1] = index1; mAngle = angle; } int mIndex[2]; // индексы вершин float mAngle; // угол в радианах}; void FindEdges( const QVector <QPoint> & src, // вектор всех вершин int baseIndex, // индекс вершины для которой ищем ребра int deltaX, int deltaY, // макс размеры ребра (5) QVector <CEqge> & dst ) // выходной вектор ребер{ const QPoint & base = src[baseIndex]; for (int i = 0; i < src.size(); ++i) { if (i == baseIndex) continue; QPoint delta = src[i] - base; if (qAbs(delta.x()) > deltaX) continue; if (qAbs(delta.y()) > deltaY) continue; float angle = atan2(float(delta.y()), delta.x()); if (angle < 0.0f) angle += PI2; dst.push_back(CEdge(baseIndex, i, angle)); }}
C++ (Qt)private: struct a { int begin,end; }; QVector<QPoint> m_points; public slots: void test() { m_points.append(QPoint(10,10)); m_points.append(QPoint(10,10)); m_points.append(QPoint(10,10)); a *massive = new a[m_points.size()]; }