static void calculateDelaunayTriangles(Rect rect, vector < Point2f > & points, vector < vector < int > > & delaunayTri) {
Subdiv2D subdiv(rect);
for (vector < Point2f > ::iterator it = points.begin(); it != points.end(); it++)
subdiv.insert( * it);
vector < Vec6f > triangleList;
subdiv.getTriangleList(triangleList);
vector < Point2f > pt(3);
vector < int > ind(3);
for (size_t i = 0; i < triangleList.size(); i++) {
Vec6f t = triangleList[i];
pt[0] = Point2f(t[0], t[1]);
pt[1] = Point2f(t[2], t[3]);
pt[2] = Point2f(t[4], t[5]);
if (rect.contains(pt[0]) && rect.contains(pt[1]) && rect.contains(pt[2])) {
for (int j = 0; j < 3; j++)
for (size_t k = 0; k < points.size(); k++)
if (abs(pt[j].x - points[k].x) < 1.0 && abs(pt[j].y - points[k].y) < 1)
ind[j] = k;
delaunayTri.push_back(ind);
}
}
}
Я хотел бы использовать эту функцию, которая собирается из opencv, но эта функция является функцией C ++. Я хочу, чтобы преобразовать его в Java и использовать его в Android. Я новичок в C ++, и я не знаю, как их конвертировать. Особенно та часть итератора, которую я знаю, как это может быть в Java. Может кто-нибудь помочь мне преобразовать это? Большое спасибо.
Обновить:
Это часть, которую я перевожу
static void calculateDelaunayTriangles(org.opencv.core.Rect rect, Vector<org.opencv.core.Point> points, Vector<Vector<Integer> > delaunayTri){
// Create an instance of Subdiv2D
Subdiv2D subdiv = new Subdiv2D(rect);
// Insert points into subdiv
for(int i = 0;i < points.size();i++)
subdiv.insert(points.get(i));
MatOfFloat6 triangleList = null;
subdiv.getTriangleList(triangleList);
Vector<MatOfPoint2f> pt = new Vector<>(3);
MatOfInt ind = new MatOfInt(3);
for( int i = 0; i < triangleList.size(); i++ )
{
MatOfFloat6 t = triangleList[i];
pt[0] = new Vector<MatOfPoint2f>(t[0], t[1]);
pt[1] = new Vector<MatOfPoint2f>(t[2], t[3]);
pt[2] = new Vector<MatOfPoint2f>(t[4], t[5 ]);
if ( rect.contains(pt[0]) && rect.contains(pt[1]) && rect.contains(pt[2])){
for(int j = 0; j < 3; j++)
for(int k = 0; k < points.size(); k++)
if(Math.abs(pt[j].x - points[k].x) < 1.0 && abs(pt[j].y - points[k].y) < 1)
ind[j] = k;
delaunayTri.push_back(ind);
}
}
}
Задача ещё не решена.
Других решений пока нет …