void DrawableStatsAttachment::operator -=(DrawableStatsAttachment *arg)
{
    setVertices               (getVertices()  - arg->getVertices());
    setPoints                 (getPoints()    - arg->getPoints());
    setLines                  (getLines()     - arg->getLines());
    setTriangles              (getTriangles() - arg->getTriangles());
    setPatches                (getPatches  () - arg->getPatches  ());
    setProcessedAttributeBytes(getProcessedAttributeBytes() -
                                   arg->getProcessedAttributeBytes());
    setStoredAttributeBytes   (getStoredAttributeBytes() -
                                   arg->getStoredAttributeBytes());
    setValid(true);
}
Ejemplo n.º 2
0
TrueClusterHistogram::TrueClusterHistogram(features::Feature *feature_,
					   DataPointCollection dps):
  feature(feature_), 
  ncenters(Parameters::getInstance()->getiParameter("clustering_means")), 
  nsegments(1), 
  patch_size(Parameters::getInstance()->getiParameter("clustering_patch_size")),
  spacing
(Parameters::getInstance()->getiParameter("clustering_spacing")),
  histogram_type(Parameters::getInstance()->
		 getiParameter("clustering_histogram_type")),
  parameters(Parameters::getUniqueClone()),
  feature_type("")
{
  
  patch_collection patches = getPatches(dps, ncenters * 100);
  KMeansClustering clustering;
  centers = clustering.cluster(patches);
}
Ejemplo n.º 3
0
Archivo: sw.c Proyecto: cran/PottsUtils
SEXP sw(SEXP sbondProbs, SEXP soneIteration, SEXP sedges, SEXP snedge, 
        SEXP sniter, SEXP snvert, SEXP sncolor)
{
	if (TYPEOF(sbondProbs) != REALSXP)
		error("'bondProbs' must be of type 'double'.");
	if (TYPEOF(soneIteration) != INTSXP)
		error("'oneIteration' must be of type 'integer'.");
	if (TYPEOF(sedges) != INTSXP)
		error("'edges' must be of type 'integer'.");
    if (TYPEOF(snedge) != INTSXP)
		error("'nedge' must be of type 'integer'.");
	if (TYPEOF(sniter) != INTSXP)
		error("'niter' must be of type 'integer'.");
	if (TYPEOF(snvert) != INTSXP)
		error("'nvert' must be of type 'integer'.");
	if (TYPEOF(sncolor) != INTSXP)
		error("'ncolor' must be of type 'integer'.");
     
	
	double *bondProbs = REAL(sbondProbs);
	int *oneIteration = INTEGER(soneIteration);
    int *edges = INTEGER(sedges);
    int nedge = asInteger(snedge);
	int niter = asInteger(sniter);
	int nvert = asInteger(snvert);
	int ncolor = asInteger(sncolor);
	
	int i, j;

	int *bondsPick = (int *) R_alloc(nedge, sizeof(int));

	SEXP scolors = PROTECT(allocMatrix(INTSXP, nvert, niter));
	int *colors = INTEGER(scolors);

	SEXP snbond = PROTECT(allocVector(INTSXP, 1));
	int *nbond = INTEGER(snbond);

	GetRNGstate();
	
	for (i = 0; i < niter; i++) { 

		nbond[0] = 0;

		/* build bonds */
		for (j = 0; j < nedge; j++) {
			double sunif; 
			if (oneIteration[edges[j]] == oneIteration[edges[j+nedge]]){
				sunif = unif_rand();
				if (sunif < bondProbs[j]){
					bondsPick[j] = 1;
					nbond[0] = nbond[0] + 1;
				}
				else{
					bondsPick[j] = 0;
				}
				
			}
			else{
				bondsPick[j] = 0;
			}
		}
		
		if (nbond[0] > 0){
			/* obtain patches */
			SEXP sa = PROTECT(allocVector(INTSXP, nbond[0]));
			SEXP sb = PROTECT(allocVector(INTSXP, nbond[0]));
			int *a = INTEGER(sa);
			int *b = INTEGER(sb);
			int k = 0;
			for (j = 0; j < nedge; j++) {
				if (bondsPick[j] == 1){
					a[k] = edges[j];
					b[k] = edges[j + nedge];
					k = k + 1;
				}
			}
			
			
			SEXP patches = PROTECT(getPatches(sa, sb, snbond, snvert));
			
			/* obtain new colors of each patch */
			//int *newColors = (int *) Calloc(LENGTH(patches), sizeof(int));
			int *newColors = Calloc(LENGTH(patches), int);
			double crand; 
			for( j = 0; j < LENGTH(patches); j++){
			        double rr=30000*unif_rand();
				crand = (int) rr % ncolor;
				newColors[j] = (int) crand; 
			}
			/* assign new colors to each patch */
			for (j = 0; j < LENGTH(patches); j++) {
				int *ver = INTEGER(VECTOR_ELT(patches, j));
				int nver = LENGTH(VECTOR_ELT(patches, j));
				for (k = 0; k < nver; k++) {
					oneIteration[ver[k]] = newColors[j];
					colors[ver[k] + i*nvert] = newColors[j];
				}
			}
		
			Free(newColors);
			UNPROTECT(3);
		}
		else{