[libgis] Test pure distance based errors



commit 2303ef60aac043b63daec4a70a9ee7d70e0ce62f
Author: Andy Spencer <andy753421 gmail com>
Date:   Mon Nov 1 03:54:15 2010 +0000

    Test pure distance based errors
    
    This commit is for historic purposes and will be reverend shortly.

 src/gis-opengl.c |    6 ++++++
 src/roam.c       |   15 ++++++++++++++-
 src/roam.h       |    1 +
 3 files changed, 21 insertions(+), 1 deletions(-)
---
diff --git a/src/gis-opengl.c b/src/gis-opengl.c
index e5f6468..3b4355b 100644
--- a/src/gis-opengl.c
+++ b/src/gis-opengl.c
@@ -249,6 +249,12 @@ static gboolean on_key_press(GisOpenGL *opengl, GdkEventKey *event, gpointer _)
 static gboolean _update_errors_cb(gpointer _opengl)
 {
 	GisOpenGL *opengl = _opengl;
+	gdouble lat, lon, elev;
+	gis_viewer_get_location(GIS_VIEWER(opengl), &lat, &lon, &elev);
+	lle2xyz(lat, lon, elev,
+		&opengl->sphere->view->pos[0],
+		&opengl->sphere->view->pos[1],
+		&opengl->sphere->view->pos[2]);
 	g_mutex_lock(opengl->sphere_lock);
 	roam_sphere_update_errors(opengl->sphere);
 	g_mutex_unlock(opengl->sphere_lock);
diff --git a/src/roam.c b/src/roam.c
index 0f4995e..aa488fc 100644
--- a/src/roam.c
+++ b/src/roam.c
@@ -361,6 +361,7 @@ static gboolean roam_triangle_backface(RoamTriangle *triangle, RoamSphere *spher
  */
 void roam_triangle_update_errors(RoamTriangle *triangle, RoamSphere *sphere)
 {
+#if 0
 	/* Update points */
 	roam_point_update_projection(triangle->p.l, sphere->view);
 	roam_point_update_projection(triangle->p.m, sphere->view);
@@ -395,6 +396,17 @@ void roam_triangle_update_errors(RoamTriangle *triangle, RoamSphere *sphere)
 		    roam_triangle_backface(triangle->t.r, sphere))
 			triangle->error *= 500;
 	}
+#endif
+
+	/* For pure distance based errors */
+	(void)roam_triangle_visible;
+	(void)roam_triangle_backface;
+	RoamPoint *l = triangle->p.l;
+	RoamPoint *m = triangle->p.m;
+	RoamPoint *r = triangle->p.r;
+	double base = distd((gdouble*)l, (gdouble*)r);
+	double dist = distd((gdouble*)m, (gdouble*)sphere->view->pos);
+	triangle->error = base/dist;
 }
 
 /**
@@ -777,8 +789,9 @@ void roam_sphere_merge_one(RoamSphere *sphere)
 gint roam_sphere_split_merge(RoamSphere *sphere)
 {
 	gint iters = 0, max_iters = 500;
+	gint target = 10000;
 	//gint target = 4000;
-	gint target = 2000;
+	//gint target = 2000;
 	//gint target = 500;
 
 	if (!sphere->view)
diff --git a/src/roam.h b/src/roam.h
index aec4b21..7c7371d 100644
--- a/src/roam.h
+++ b/src/roam.h
@@ -53,6 +53,7 @@ struct _RoamView {
 	gdouble proj[16];
 	gint view[4];
 	gint version;
+	gdouble pos[3];
 };
 
 /*************



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]