Example #1
0
bool EnvEntrance::Near(const QVector3D & p, const float dist) const
{

    QVector3D midpt(bx1+bx2+1, p.y(), by1+by2+1);
    midpt *= 0.5f;

    return (p-midpt).lengthSquared() < dist*dist;

}
Example #2
0
int main() {
    pt pt1 = {}, pt2 = {}, *p_pt = NULL;
    printf("请输入一个点的位置:");
    scanf("%d%d", &(pt1.y), &(pt1.x));
    printf("请输入一个点的位置:");
    scanf("%d%d", &(pt2.y), &(pt2.x));
    midpt(&pt1, &pt2, p_pt);
    if (p_pt) {
        printf("中点位置是(%d, %d)\n", p_pt->y, p_pt->x);
        free(p_pt);
        p_pt = NULL;
    }
    return 0;
}
Example #3
0
File: main.cpp Project: CCJY/coliru
std::vector<double>
crk4(class Container1<functor_type>::iterator funct_iter1,
     class Container1<functor_type>::iterator funct_iter2,
     class Container2<coord_type>::iterator coord_iter1, 
     class Container2<coord_type>::iterator coord_iter2,
     t_type t, 
     double h)
{    
    auto k1 = init(funct_iter1, funct_iter2, coord_iter1, coord_iter2, t);
    auto m1 = midpt(k1, coord_iter1, h);
    t += 0.5*h;
    auto k2 = init(funct_iter1, funct_iter2, coord_iter1, coord_iter2, t);
    auto m2 = midpt(k1, coord_iter1, h);
    auto k3 = init(funct_iter1, funct_iter2, coord_iter1, coord_iter2, t);
    auto m3 = midpt(k1, coord_iter1, h);
    t += 0.5*h;
    auto k4 = init(funct_iter1, funct_iter2, coord_iter1, coord_iter2, t);	
	
    auto coord_next = runge_kutta4(coord_iter1, coord_iter2, 
                      k1.begin(), k2.begin(), k3.begin(), k4.begin(),
		      h);
					  
    return coord_next;
}
Example #4
0
bool generateLinearSeparation(std::vector<point>& inputPoints,
															double& a,
															double& b,
															double& c,
															int& nBad1,
															int& nBad2,
															point& centroidOne,
															point& centroidTwo)
{
	int numOne=0, numTwo=0;
	for (std::vector<point>::iterator pt = inputPoints.begin(); pt != inputPoints.end(); pt++)
	{
		if (pt->isClassOne)
		{
			numOne++;
			centroidOne.x += pt->x;
			centroidOne.y += pt->y;
		}
		else
		{
			numTwo++;
			centroidTwo.x += pt->x;
			centroidTwo.y += pt->y;
		}
	}
	centroidOne.x /= numOne;
	centroidOne.y /= numOne;

	centroidTwo.x /= numTwo;
	centroidTwo.y /= numTwo;

	outputPoint(centroidOne);
	outputPoint(centroidTwo);

	point midpt(
			(centroidTwo.x+centroidOne.x)/2,
			(centroidTwo.y+centroidOne.y)/2);
	outputPoint(midpt);

	//direction vector
	point oneToTwo(
			centroidTwo.x-centroidOne.x,
			centroidTwo.y-centroidOne.y);

	double mag = distance(oneToTwo,point(0,0,false));
	std::cerr << mag << std::endl;

	oneToTwo.x /= mag;
	oneToTwo.y /= mag;
	//actual direction
	
	point bisector(oneToTwo.x,oneToTwo.y);
	outputPoint(bisector);
	
	b = bisector.y;
	a = bisector.x;
	c = -(a*midpt.x+b*midpt.y);

	for (std::vector<point>::iterator pt = inputPoints.begin(); pt != inputPoints.end(); pt++)
	{
		if(pt->isClassOne)
		{
			if(SGN(a*pt->x+b*pt->y+c) != SGN(a*centroidOne.x+b*centroidOne.y+c))
				nBad1++;
		}
		else
		{
			if(SGN(a*pt->x+b*pt->y+c) != SGN(a*centroidTwo.x+b*centroidTwo.y+c))
				nBad2++;
		}
	}
	return true;
}