Example #1
0
void interactive(char option)
{
	// Number to round
	float input = 0.0;

	// Rounding operation to use
	int opt = option;

	// Char used for clearing buffer
	int ch;

	//Loop infinitely asking user for numbers to round, quitting if they press q at the end
	while(1) 
	{
		// Ask the user for a number and parse it into a float
		printf("\nEnter a number to round >");
		scanf("%f",&input);
		FLUSH; //Don't forget to flush!

		// If no additonal option specifiers were provided, ask the user for rounding method to use
		if(option == INTERACTIVE) {
			printf("Enter u to round up, d to round down, or any key to for swedish rounding >");
			opt = getchar();
		}
		// Ensure user entered a valid option, default to swedish rounding if not
		if(opt != ROUND_UP && opt != ROUND_DOWN) 
			opt = ROUND_SWEDISH;

		// Print the rounded number 
		printf("%.0f\n",(roundnum(input,opt)));

		//Ask the user if they wish to quit. Quit if q is supplied
		printf("Press q to quit or any key to continue > ");
		if(getchar() == QUIT) return; 
	} 
}
Example #2
0
void TerosCam::drawline (double p1 [3], double p2 [3], char fill, int fg, int bg, int attr)
{
	double snorm = 0;
    
	bool swap = false;
    
	if (!(p2 [1] >= 0 && p2 [1] <= m_viewcolumns - 1 && p2 [2] >= 0 && p2 [2] <= view.size ()/m_viewcolumns - 1))
	{
		if (p1 [1] >= 0 && p1 [1] <= m_viewcolumns - 1 && p1 [2] >= 0 && p1 [2] <= view.size ()/m_viewcolumns - 1)
		{
			double buffer [3];
            
			buffer [0] = p2 [0];
			buffer [1] = p2 [1];
			buffer [2] = p2 [2];
            
			p2 [0] = p1 [0];
			p2 [1] = p1 [1];
			p2 [2] = p1 [2];
            
			p1 [0] = buffer [0];
			p1 [1] = buffer [1];
			p1 [2] = buffer [2];
            
			swap = true;
		}
		else
		{
			if (p1 [1] - p2 [1] != 0)
			{
				double ux = -1;
				double uy = -1;
				double dx = -1;
				double dy = -1;
				double lx = -1;
				double ly = -1;
				double rx = -1;
				double ry = -1;
                
				double up;
				double dp;
				double lp;
				double rp;
                
				double m = (p1 [2] - p2 [2])/(p1 [1] - p2 [1]);
				double b = p1 [2] - p1 [1]*m;
                
				if ((view.size ()/m_viewcolumns - 1 - b)/m >= 0 && (view.size ()/m_viewcolumns - 1 - b)/m <= m_viewcolumns - 1)
				{
					ux = (view.size ()/m_viewcolumns - 1 - b)/m;
					uy = view.size ()/m_viewcolumns - 1;
				}
                
				if ((0 - b)/m >= 0 && (0 - b)/m <= m_viewcolumns - 1)
				{
					dx = (0 - b)/m;
					dy = 0;
				}
                
				if (0*m + b >= 0 && 0*m + b <= view.size ()/m_viewcolumns - 1)
				{
					lx = 0;
					ly = 0*m + b;
				}
                
				if ((m_viewcolumns - 1)*m + b >= 0 && (m_viewcolumns - 1)*m + b <= view.size ()/m_viewcolumns - 1)
				{
					rx = m_viewcolumns - 1;
					ry = (m_viewcolumns - 1)*m + b;
				}
                
				up = dist (ux, uy, 0, p2 [1], p2 [2], 0);
				dp = dist (dx, dy, 0, p2 [1], p2 [2], 0);
				lp = dist (lx, ly, 0, p2 [1], p2 [2], 0);
				rp = dist (rx, ry, 0, p2 [1], p2 [2], 0);
                
				if (ux != -1 && lx != -1)
				{
					if (up < lp)
					{
						snorm = up;
					}
					else
					{
						snorm = lp;
					}
				}
				else if (ux != -1 && dx != -1)
				{
					if (up < dp)
					{
						snorm = up;
					}
					else
					{
						snorm = dp;
					}
				}
				else if (ux != -1 && rx != -1)
				{
					if (up < rp)
					{
						snorm = up;
					}
					else
					{
						snorm = rp;
					}
				}
				else if (rx != -1 && dx != -1)
				{
					if (rp < dp)
					{
						snorm = rp;
					}
					else
					{
						snorm = dp;
					}
				}
				else if (rx != -1 && lx != -1)
				{
					if (rp < lp)
					{
						snorm = rp;
					}
					else
					{
						snorm = lp;
					}
				}
				else if (dx != -1 && lx != -1)
				{
					if (dp < lp)
					{
						snorm = dp;
					}
					else
					{
						snorm = lp;
					}
				}
				else
				{
					return;
				}
			}
			else
			{
				if (p2 [1] >= 0 && p2 [1] <= m_viewcolumns - 1)
				{
					if (abs(p2 [2] - view.size ()/m_viewcolumns - 1) < abs(p2 [2] - 0))
					{
						snorm = abs(p2 [2] - view.size ()/m_viewcolumns - 1);
					}
					else
					{
						snorm = abs(p2 [2] - 0);
					}
				}
			}
		}
	}
    
	double dispx = p1 [1] - p2 [1];
	double dispy = p1 [2] - p2 [2];
    
	double normdispxy = dist (dispx, dispy, 0, 0, 0, 0);
    
	dispx /= normdispxy;
	dispy /= normdispxy;
    
	for (double norm = snorm; norm < normdispxy; norm += 0.5)
	{
		if (getelementindex (roundnum(dispx*norm + p2 [1]), roundnum(dispy*norm + p2 [2])) == -1)
		{
			if (swap)
			{
				double buffer [3];
                
				buffer [0] = p2 [0];
				buffer [1] = p2 [1];
				buffer [2] = p2 [2];
                
				p2 [0] = p1 [0];
				p2 [1] = p1 [1];
				p2 [2] = p1 [2];
                
				p1 [0] = buffer [0];
				p1 [1] = buffer [1];
				p1 [2] = buffer [2];
			}
            
			return;
		}
        
		if (((norm/normdispxy)*(p1 [0] - p2 [0])) + p2 [0] > 0 && (((norm/normdispxy)*(p1 [0] - p2 [0])) + p2 [0] < viewdepth [getelementindex (roundnum(dispx*norm + p2 [1]), roundnum(dispy*norm + p2 [2]))] || viewdepth [getelementindex (roundnum(dispx*norm + p2 [1]), roundnum(dispy*norm + p2 [2]))] == -1))
		{
			view [getelementindex (roundnum(dispx*norm + p2 [1]), roundnum(dispy*norm + p2 [2]))].c = fill;
            view [getelementindex (roundnum(dispx*norm + p2 [1]), roundnum(dispy*norm + p2 [2]))].fg = fg;
            view [getelementindex (roundnum(dispx*norm + p2 [1]), roundnum(dispy*norm + p2 [2]))].bg = bg;
            view [getelementindex (roundnum(dispx*norm + p2 [1]), roundnum(dispy*norm + p2 [2]))].attr = attr;
            
			viewdepth [getelementindex (roundnum(dispx*norm + p2 [1]), roundnum(dispy*norm + p2 [2]))] = norm/normdispxy*(p1 [0] - p2 [0]) + p2 [0];
		}
	}
}