std::vector<Vec2> AutoPolygon::reduce(const std::vector<Vec2>& points, const Rect& rect , const float& epsilon)
{
    auto size = points.size();
    // if there are less than 3 points, then we have nothing
    if(size<3)
    {
        log("AUTOPOLYGON: cannot reduce points for %s that has less than 3 points in input, e: %f", _filename.c_str(), epsilon);
        return std::vector<Vec2>();
    }
    // if there are less than 9 points (but more than 3), then we don't need to reduce it
    else if (size < 9)
    {
        log("AUTOPOLYGON: cannot reduce points for %s e: %f",_filename.c_str(), epsilon);
        return points;
    }
    float maxEp = MIN(rect.size.width, rect.size.height);
    float ep = clampf(epsilon, 0.0, maxEp/_scaleFactor/2);
    std::vector<Vec2> result = rdp(points, ep);
    
    auto last = result.back();
    if(last.y > result.front().y && last.getDistance(result.front()) < ep*0.5)
    {
        result.front().y = last.y;
        result.pop_back();
    }
    return result;
}
Beispiel #2
0
int  main(void)
{
//	PORTC_PCR5 = PORT_PCR_MUX(0x1); // LED is on PC5 (pin 13), config as GPIO (alt = 1)
//	GPIOC_PDDR = (1<<5);			// make this an output pin
//	LED_OFF;						// start with LED off

	UARTInit(TERM_UART, TERM_BAUD);			// open UART for comms
	xputs(hello);
	xputs("\n\rEnter a string to parse...\n\r");

	EnableInterrupts;

	while (1)
	{
		xputs("\n\rString: ");
		get_line(buff, MAX_STR_LEN);
		if (strlen(buff) > 0)
		{
			answer = 0;
			error = rdp(buff, &answer);
			if (error == RDP_OK)
			{
				xprintf("Answer = %d 0x%08x\n\r", answer, answer);
			}
			else
			{
				xprintf("ERROR: rdp() returned %d\n\r", error);
			}
		}
	}

	return  0;						// should never get here!
}
Beispiel #3
0
long long count_letters(Vector in, int start, int end){
  long long count = 0;
  for(int pos = start; pos < end || (end < 0 && Vector_data_char(in)[pos]);){
    long long length;
    pos = rdp(in, pos, &length, 1);
    count += length;
  }
  return count;
}
Beispiel #4
0
static Vector<Vector2> rdp(const Vector<Vector2> &v, float optimization) {
	if (v.size() < 3)
		return v;

	int index = -1;
	float dist = 0;
	//not looping first and last point
	for (size_t i = 1, size = v.size(); i < size - 1; ++i) {
		float cdist = perpendicular_distance(v[i], v[0], v[v.size() - 1]);
		if (cdist > dist) {
			dist = cdist;
			index = static_cast<int>(i);
		}
	}
	if (dist > optimization) {

		Vector<Vector2> left, right;
		left.resize(index);
		for (int i = 0; i < index; i++) {
			left.write[i] = v[i];
		}
		right.resize(v.size() - index);
		for (int i = 0; i < right.size(); i++) {
			right.write[i] = v[index + i];
		}
		Vector<Vector2> r1 = rdp(left, optimization);
		Vector<Vector2> r2 = rdp(right, optimization);

		int middle = r1.size();
		r1.resize(r1.size() + r2.size());
		for (int i = 0; i < r2.size(); i++) {
			r1.write[middle + i] = r2[i];
		}
		return r1;
	} else {
		Vector<Vector2> ret;
		ret.push_back(v[0]);
		ret.push_back(v[v.size() - 1]);
		return ret;
	}
}
std::vector<cocos2d::Vec2> AutoPolygon::rdp(const std::vector<cocos2d::Vec2>& v, float optimization)
{
    if(v.size() < 3)
        return v;
    
    int index = -1;
    float dist = 0;
    //not looping first and last point
    for(size_t i = 1; i < v.size()-1; i++)
    {
        float cdist = perpendicularDistance(v[i], v.front(), v.back());
        if(cdist > dist)
        {
            dist = cdist;
            index = static_cast<int>(i);
        }
    }
    if (dist>optimization)
    {
        std::vector<Vec2>::const_iterator begin = v.begin();
        std::vector<Vec2>::const_iterator end   = v.end();
        std::vector<Vec2> l1(begin, begin+index+1);
        std::vector<Vec2> l2(begin+index, end);
        
        std::vector<Vec2> r1 = rdp(l1, optimization);
        std::vector<Vec2> r2 = rdp(l2, optimization);
        
        r1.insert(r1.end(), r2.begin()+1, r2.end());
        return r1;
    }
    else {
        std::vector<Vec2> ret;
        ret.push_back(v.front());
        ret.push_back(v.back());
        return ret;
    }
}
Beispiel #6
0
void part1(){
  char c;
  Vector in = Vector_create_char();
  long long count = 0;
  while(scanf("%c", &c) != EOF){
    Vector_push_char(in, c);
  }
  Vector_push_char(in, 0);
  for(int pos = 0; Vector_data_char(in)[pos];){
    long long length;
    pos = rdp(in, pos, &length, 0);
    count += length;
  }
  printf("%lld\n", count);
  Vector_free(in);
}
Beispiel #7
0
void PerformRawDataPreparation(Dimension &dims, OptionsParser &op,
                               CVector &kdata, RVector &mask, RVector &w)
{
  RawDataPreparation rdp(op, true, true, true, true);

  std::cout << "INFO: Loading RAW data from file/directory: "
            << op.kdataFilename << std::endl;
  std::string outputDir = utils::GetParentDirectory(op.outputFilename);

  rdp.PrepareRawData(kdata, mask, w, dims);

  // Extract dicom raw data and prepare it
  if (op.nonuniform)
  {
    ExportAdditionalResultsToMatlabBin(outputDir.c_str(), "w.bin", w);
  }

  ExportAdditionalResultsToMatlabBin(outputDir.c_str(), "mask.bin", mask);
  ExportAdditionalResultsToMatlabBin(outputDir.c_str(), "kdata.bin", kdata);
}
Beispiel #8
0
static Vector<Vector2> reduce(const Vector<Vector2> &points, const Rect2i &rect, float epsilon) {
	int size = points.size();
	// if there are less than 3 points, then we have nothing
	ERR_FAIL_COND_V(size < 3, Vector<Vector2>());
	// if there are less than 9 points (but more than 3), then we don't need to reduce it
	if (size < 9) {
		return points;
	}

	float maxEp = MIN(rect.size.width, rect.size.height);
	float ep = CLAMP(epsilon, 0.0, maxEp / 2);
	Vector<Vector2> result = rdp(points, ep);

	Vector2 last = result[result.size() - 1];

	if (last.y > result[0].y && last.distance_to(result[0]) < ep * 0.5f) {
		result.write[0].y = last.y;
		result.resize(result.size() - 1);
	}
	return result;
}
void ASSR::add_data(Ptr<FineNowcastingData> dp) {
    DataPolicy::add_data(dp);
    Ptr<RegressionData> rdp(dp->regression_data());
    regression_->add_data(rdp);  // full of missing values
}
Beispiel #10
0
int main(int argc, char* argv[], char* envp[]){
	//silence warnings
	(void)envp;
    if(argc != 4){
        printf("Wrong number of arguments. Usage %s <local port> <remote host> <remote port> \n", argv[0]);
        return 1;
    }

	int listenPort = atoi(argv[1]);

	//timing synchronization
	//apps will signal when they're all done

	pthread_mutex_init(&count_mutex, NULL);
  	pthread_cond_init (&count_threshold_cv, NULL);

  	struct timeval t1;
  	struct timeval t2;

	//	set up network
	ppETH eth(1, listenPort, argv[3], argv[2]);
	ppIP ip(2);
	ppTCP tcp(3);
	ppUDP udp(4);
	ppFTP ftp(5);
	ppTEL tel(6);
	ppRDP rdp(7);
	ppDNS dns(8);

	ftpAPP ftpApplication(5, true);
	telAPP telApplication(6, true);
	rdpAPP rdpApplication(7, true);
	dnsAPP dnsApplication(8, true);

	eth.registerHLP(ip);
	ip.registerHLP(tcp);
	ip.registerHLP(udp);
	tcp.registerHLP(ftp);
	tcp.registerHLP(tel);	
	udp.registerHLP(rdp);
	udp.registerHLP(dns);

	dns.registerHLP(dnsApplication);
	ftp.registerHLP(ftpApplication);
	rdp.registerHLP(rdpApplication);
	tel.registerHLP(telApplication);
	
	ftp.registerLLP(tcp);
	tel.registerLLP(tcp);
	rdp.registerLLP(udp);
	dns.registerLLP(udp);
	tcp.registerLLP(ip);
	udp.registerLLP(ip);
	ip.registerLLP(eth);


	dnsApplication.registerLLP(dns);
	ftpApplication.registerLLP(ftp);
	rdpApplication.registerLLP(rdp);
	telApplication.registerLLP(tel);

	ip.start();
	tcp.start();
	udp.start();
	ftp.start();
	tel.start();
	rdp.start();
	dns.start();


	//make sure everything is set before we start timing
	sleep(5);
	gettimeofday(&t1, NULL);
	// dnsApplication.startListen();
	// ftpApplication.startListen();
	// rdpApplication.startListen();
	// telApplication.startListen();
	dnsApplication.startApplication();
	ftpApplication.startApplication();
	rdpApplication.startApplication();
	telApplication.startApplication();

	//wait for apps to finish and then stop timing or whatever
	pthread_mutex_lock(&count_mutex);
	while (count<numApps*2) {
		pthread_cond_wait(&count_threshold_cv, &count_mutex);
	}
	pthread_mutex_unlock(&count_mutex);
	gettimeofday(&t2, NULL);
	printf("Listening on %d took %f ms\n", listenPort, diffms(t2,t1));



}
void TextureBuilder::createTextureWorkflow(QString prefix, bool bCreateImage , QString backgroundImage , QString destImage, bool last)
{
    QStringList data; data << "Perlin" << "Billow" << "RidgedMulti" << "Voronoi";
    QSharedPointer<ModuleDescriptor> p(new ModuleDescriptor());
    p.data()->setName(prefix+"_Module");
    p.data()->setModuleType(data[SSGX::d1000() % 4]);
    p.data()->setupPropertiesToExport(p.data()->moduleType());
    p.data()->setEnableRandom(true);
    p.data()->setEnabledist(true);

    if (last) {
        p.data()->moduleType() != "Voronoi" ?
                    p.data()->setFreq(1.9*SSGX::floatRand()+1.2) :
                    p.data()->setFreq(5*SSGX::floatRand()+3.2) ;
        p.data()->setLac(1.9*SSGX::floatRand()+1.2);
        p.data()->setPers(0.25*SSGX::floatRand()+0.22);
    } else {
        p.data()->moduleType() != "Voronoi" ?
            p.data()->setFreq(3.2*SSGX::floatRand()+1.2) :
            p.data()->setFreq(10.2*SSGX::floatRand()+5.2);
        p.data()->setLac(3.2*SSGX::floatRand()+1.2);
        p.data()->setPers(0.2*SSGX::floatRand()+0.22);
    }

    _modDesc.insert(p.data()->name(),p);
    QSharedPointer<HeightMapDescriptor> hmp(new HeightMapDescriptor());
    hmp.data()->setName(prefix+"_heightMap");
    _hmDesc.insert(hmp.data()->name(), hmp);

    if (bCreateImage) {
        QSharedPointer<ImageDescriptor> imp(new ImageDescriptor());
        imp.data()->setName(destImage);
        __imDesc.insert(imp.data()->name(),imp);
    }

    QSharedPointer<NoiseMapBuilderDescriptor> nmbd(new NoiseMapBuilderDescriptor());
    nmbd.data()->setName(prefix+"_noiseMapBuilder1");
    nmbd.data()->setSourceModule(p.data()->name());
    nmbd.data()->setSize(1024,512);
    nmbd.data()->setDest(hmp.data()->name());
    _nmbDesc.insert(nmbd.data()->name(),nmbd);
    QSharedPointer<RendererDescriptor> rdp(new RendererDescriptor());
    rdp.data()->setName(prefix+"_renderer");
    rdp.data()->setHeightmap(hmp.data()->name());
    rdp.data()->gradientInfo().clear();
    if (backgroundImage == "") {
        auto rndGradient = ColorOps::randomGradient(12,20, ColorOps::randomHSLColor());
        for (auto i = rndGradient.begin(); i != rndGradient.end(); ++i) {
            rdp.data()->gradientInfo().append(GradientInfo(
                        i.key(),
                        i.value().red(),
                        i.value().green(),
                        i.value().blue(),
                        i.value().alpha())
                        );
        }
        auto c = ColorOps::randomHSLColor();
        rdp.data()->gradientInfo().append(GradientInfo(1.0,c.red(),c.green(),c.blue(),c.alpha()));
    } else {
        auto rndGradient = ColorOps::randomGradient(12,20, ColorOps::randomHSLColor(),true,0,128);
        for (auto i = rndGradient.begin(); i != rndGradient.end(); ++i) {
            rdp.data()->gradientInfo().append(GradientInfo(
                        i.key(),
                        i.value().red(),
                        i.value().green(),
                        i.value().blue(),
                        i.value().alpha())
                        );
        }
        auto c = ColorOps::randomHSLColor();
        rdp.data()->gradientInfo().append(GradientInfo(1.0,c.red(),c.green(),c.blue(),c.alpha()));
    }
    if (last) {
        rdp.data()->setEnabledlight(true);
        rdp.data()->setLightbrightness(2.0);
        rdp.data()->setLightcontrast(1.4);
        auto c =  rdp.data()->gradientInfo().count() / 3;
        auto d = c+ SSGX::dn(c);
        qDebug() << "last enabled. " << c << ", " << d;
        for (auto h = 0; h < rdp.data()->gradientInfo().count(); ++h) {
            if (h < d) {
                auto t = rdp.data()->gradientInfo()[h];
                auto newT = std::tuple<double,int,int,int,int>(
                            std::get<0>(t),
                            std::get<1>(t),
                            std::get<2>(t),
                            std::get<3>(t),
                            255
                            );
                rdp.data()->gradientInfo()[h] = newT;
            } else {
                auto t = rdp.data()->gradientInfo()[h];
                auto newT = std::tuple<double,int,int,int,int>(
                            std::get<0>(t),
                            std::get<1>(t),
                            std::get<2>(t),
                            std::get<3>(t),
                            0
                            );
                rdp.data()->gradientInfo()[h] = newT;

            }
        }
    }
    rdp.data()->setBackgroundImage(backgroundImage);
    rdp.data()->setDestImage(destImage);
    this->addRendererDescriptor(rdp.data()->name(),rdp);
}
Beispiel #12
0
void parse(){
  buff[buffl]='\0';
  rdp();//
}