aboutsummaryrefslogtreecommitdiff
path: root/src/poser_charlesrefine.c
diff options
context:
space:
mode:
authorCNLohr <charles@cnlohr.com>2018-04-25 23:53:09 -0400
committerGitHub <noreply@github.com>2018-04-25 23:53:09 -0400
commitd47ce43f833d7382a66ba492582a497a8deb075f (patch)
treeb3fc191ff4a0749a915c4134d3bb27049b2e176d /src/poser_charlesrefine.c
parent824811185187d2941eff054ec7be1aa2aa6ace50 (diff)
parent5d4f2e2d9eb0548d880b130cc15733662fc57158 (diff)
downloadlibsurvive-d47ce43f833d7382a66ba492582a497a8deb075f.tar.gz
libsurvive-d47ce43f833d7382a66ba492582a497a8deb075f.tar.bz2
Merge pull request #130 from abhijeetvhotkar/master
Adding UDP support
Diffstat (limited to 'src/poser_charlesrefine.c')
-rw-r--r--src/poser_charlesrefine.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/poser_charlesrefine.c b/src/poser_charlesrefine.c
index 12c2b9c..b35a878 100644
--- a/src/poser_charlesrefine.c
+++ b/src/poser_charlesrefine.c
@@ -166,12 +166,25 @@ int PoserCharlesRefine(SurviveObject *so, PoserData *pd) {
FLT dist = dot3d(sensorpos_rel_lh, sweep_normal);
if ((i = dd->ptsweep) < MAX_PT_PER_SWEEP) {
+ int repeat = 0;
+ int k;
+
+ //Detect repeated hits. a rare problem but can happen with lossy sources of pose.
+ for( k = 0; k < dd->ptsweep; k++ )
+ {
+ if( dd->sensor_ids[k] == sensor_id )
+ {
+ repeat = 1;
+ i = k;
+ }
+ }
memcpy(dd->normal_at_errors[i], sweep_normal, sizeof(FLT) * 3);
dd->quantity_errors[i] = dist;
dd->angles_at_pts[i] = angle;
dd->sensor_ids[i] = sensor_id;
memcpy(&dd->object_pose_at_hit[i], &dd->InteralPoseUsedForCalc, sizeof(SurvivePose));
- dd->ptsweep++;
+ if( !repeat )
+ dd->ptsweep++;
}
dd->last_angle_lh_axis[lhid][axis] = inangle;
@@ -337,7 +350,7 @@ int PoserCharlesRefine(SurviveObject *so, PoserData *pd) {
// Stage 4: "Tug" on the rotation of the object, from all of the sensor's pov.
// If we were able to determine likliehood of a hit in the sweep instead of afterward
// we would actually be able to perform this on a per-hit basis.
- if (1) {
+ if (validpoints > 1) {
LinmathQuat correction;
quatcopy(correction, LinmathQuat_Identity);
for (i = 0; i < pts; i++) {