本文整理汇总了C++中Intersection::setValues方法的典型用法代码示例。如果您正苦于以下问题:C++ Intersection::setValues方法的具体用法?C++ Intersection::setValues怎么用?C++ Intersection::setValues使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Intersection
的用法示例。
在下文中一共展示了Intersection::setValues方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Intercepta
Intersection Cone::Intercepta(const Raio& r_vis, IntersectionMode mode, float threshold)
{
float a, b, c, delta;
Intersection intersection;
// valores intermediários
Vetor_3D K = Vetor_3D(r_vis.X0() - centro.X(),
r_vis.Y0() - centro.Y(),
r_vis.Z0() - centro.Z());
// montando a equação do 2º grau at2 + bt + c = 0
// equação para o cone:
a = pow(r_vis.Direcao().X(), 2) + pow(r_vis.Direcao().Z(), 2) - pow(r_vis.Direcao().Z(), 2);
b = 2*((r_vis.Direcao().X() * K.X()) + (r_vis.Direcao().Z() * K.Y()) - (r_vis.Direcao().Z() * K.Z));
c = pow(K.X(), 2) + pow(K.Y(), 2) - pow(K.Z(), 2);
delta = b*b - 4*a*c;
if (delta >= 0) {
float t_plus = (-b + sqrt(delta)) /(2*a);
float t_minus = (-b - sqrt(delta)) /(2*a);
Ponto_3D p_plus( r_vis.Origem().X() + r_vis.Direcao().X()*t_plus ,
r_vis.Origem().Y() + r_vis.Direcao().Y()*t_plus ,
r_vis.Origem().Z() + r_vis.Direcao().Z()*t_plus );
Ponto_3D p_minus( r_vis.Origem().X() + r_vis.Direcao().X()*t_minus ,
r_vis.Origem().Y() + r_vis.Direcao().Y()*t_minus ,
r_vis.Origem().Z() + r_vis.Direcao().Z()*t_minus );
bool p_plus_dentro_do_intervalo = false;
bool p_minus_dentro_do_intervalo = false;
if ((p_plus.Y() < (centro.Y() + altura/2.0)) && (p_minus.Y() > (centro.Y() - altura/2.0)))
p_plus_dentro_do_intervalo = true;
if ((p_minus.Y() < (centro.Y() + altura/2.0)) && (p_minus.Y() > (centro.Y() - altura/2.0)))
p_minus_dentro_do_intervalo = true;
if (p_plus_dentro_do_intervalo && p_minus_dentro_do_intervalo){
intersection = Intersection::nearest(
Intersection(this, t_plus),
Intersection(this, t_minus), threshold);
} else if (p_plus_dentro_do_intervalo){
intersection.setValues(this, t_plus);
} else if (p_minus_dentro_do_intervalo){
intersection.setValues(this, t_minus);
}
}
return intersection;
}
示例2: Intercepta
Intersection PlanoY::Intercepta(const Raio& r_vis, IntersectionMode mode, float threshold)
{
float x,z;
float t = (a - r_vis.Y0()) / r_vis.Dy();
Intersection lastIntersection;
if ( t <0)
return lastIntersection;
x = r_vis.X0() + t * r_vis.Dx();
if (INSIDE(x,bmin,bmax))
{
z = r_vis.Z0() + t *r_vis.Dz();
if (INSIDE(z,cmin,cmax))
{
lastIntersection.setValues(this, t);
return lastIntersection;
}
}
return lastIntersection;
}