Example #1
0
void Line::draw(Image& image, const Colour& colour, bool bAntialiased)
{
	if(bAntialiased)
	{
		std::vector<Point> pts;
		std::vector<float> alpha;
		lineWu(m_start.xInt(), m_start.yInt(), m_end.xInt(), m_end.yInt(), pts, alpha);

		for(uint i = 0; i < pts.size(); ++i)
			image.draw_point(pts[i].xInt(), pts[i].yInt(), 0, colour.colour(), colour.alpha()*alpha[i]);
	}
	else
	{
		std::vector<Point> pts = points();
		for(uint i = 0; i < pts.size(); ++i)
			image.draw_point(pts[i].xInt(), pts[i].yInt(), 0, colour.colour());
	}
}
Example #2
0
void SpacePartitioning::partition(int x1, int y1, int x2, int y2, int iteration)
{
	x1 += m_offset;
	y1 += m_offset;
	x2 -= m_offset;
	y2 -= m_offset;

	int centreX = x1 + (x2-x1)/2;
	int centreY = y1 + (y2-y1)/2;
	int radius = (x2-x1)/2;

	if(randFloat(0, 1.0f) < m_drawPrimativePercentage)
	{
		float opacity = 1.0f; //randFloat(0.6f, 1.0f);

		// colour of primative must be different than primative below it
		Colour fillColour = m_palette[rand() % m_palette.size()];
		while(sameColour(fillColour, centreX, centreY))
			fillColour = m_palette.at(rand() % m_palette.size());

		Colour borderColour(fillColour);
		//borderColour.darken(0.2f);

		int randShape = randInt(0,2);
		if(randShape == 0)
		{
			m_image.draw_circle(centreX, centreY, radius, borderColour.colour(), opacity);
			m_image.draw_circle(centreX, centreY, radius-m_borderSize, fillColour.colour(), opacity);
		}
		else if(randShape == 1)
		{
			m_image.draw_rectangle(x1, y1, x2, y2, borderColour.colour(), opacity);
			m_image.draw_rectangle(x1+m_borderSize, y1+m_borderSize, x2-m_borderSize, y2-m_borderSize, fillColour.colour(), opacity);
			
		}
	}

	/*
	if(iteration == 0)
	{
		iteration++;
		partition(x1, y1, 0.25*(x2-x1), 0.25*(x2-x1), iteration);	// top-left
		partition(0.25*(x2-x1), y1, x2, 0.25*(x2-x1), iteration);	// top-right
		partition(x1, 0.25*(x2-x1), 0.25*(x2-x1), y2, iteration);	// bottom-left
		partition(0.25*(x2-x1), 0.25*(x2-x1), x2, y2, iteration);	// bottom-right
	}
	*/

	if(m_bDisplay)
	{
		if(m_imageDisplay.is_closed())
			exit(0);

		if(m_imageDisplay.is_keyS())
			Artist::saveFrame(m_image, "SpacePartition.png");

		m_imageDisplay.display(m_image);
	}

	if(iteration < m_maxIterations)
	{
		iteration++;
		partition(x1, y1, centreX, centreY, iteration);	// top-left
		partition(centreX, y1, x2, centreY, iteration);	// top-right
		partition(x1, centreY, centreX, y2, iteration);	// bottom-left
		partition(centreX, centreY, x2, y2, iteration);	// bottom-right
	}
}