本文整理汇总了C++中VerdictVector::set方法的典型用法代码示例。如果您正苦于以下问题:C++ VerdictVector::set方法的具体用法?C++ VerdictVector::set怎么用?C++ VerdictVector::set使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VerdictVector
的用法示例。
在下文中一共展示了VerdictVector::set方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: form_Q
inline void form_Q( const VerdictVector& v1,
const VerdictVector& v2,
const VerdictVector& v3,
VerdictVector& q1,
VerdictVector& q2,
VerdictVector& q3 )
{
double g11, g12, g13, g22, g23, g33;
g11 = v1 % v1;
g12 = v1 % v2;
g13 = v1 % v3;
g22 = v2 % v2;
g23 = v2 % v3;
g33 = v3 % v3;
double rtg11 = sqrt(g11);
double rtg22 = sqrt(g22);
double rtg33 = sqrt(g33);
VerdictVector temp1;
temp1 = v1 * v2;
double cross = sqrt( temp1 % temp1 );
double q11,q21,q31;
double q12,q22,q32;
double q13,q23,q33;
q11=1;
q21=0;
q31=0;
q12 = g12 / rtg11 / rtg22;
q22 = cross / rtg11 / rtg22;
q32 = 0;
q13 = g13 / rtg11 / rtg33;
q23 = ( g11*g23-g12*g13 )/ rtg11 / rtg33 / cross;
temp1 = v2 * v3;
q33 = ( v1 % temp1 ) / rtg33 / cross;
q1.set( q11, q21, q31 );
q2.set( q12, q22, q32 );
q3.set( q13, q23, q33 );
}
示例2: get_weight
/*!
get the weights based on the average size
of a tet
*/
int get_weight ( VerdictVector &w1,
VerdictVector &w2,
VerdictVector &w3 )
{
static const double rt3 = sqrt(3.0);
static const double root_of_2 = sqrt(2.0);
w1.set(1,0,0);
w2.set(0.5, 0.5*rt3, 0 );
w3.set(0.5, rt3/6.0, root_of_2/rt3);
double scale = pow( 6.*verdict_tet_size/determinant(w1,w2,w3),0.3333333333333);
w1 *= scale;
w2 *= scale;
w3 *= scale;
return 1;
}
示例3: product
inline void product( VerdictVector& a1,
VerdictVector& a2,
VerdictVector& a3,
VerdictVector& b1,
VerdictVector& b2,
VerdictVector& b3,
VerdictVector& c1,
VerdictVector& c2,
VerdictVector& c3 )
{
VerdictVector x1, x2, x3;
x1.set( a1.x(), a2.x(), a3.x() );
x2.set( a1.y(), a2.y(), a3.y() );
x3.set( a1.z(), a2.z(), a3.z() );
c1.set( x1 % b1, x2 % b1, x3 % b1 );
c2.set( x1 % b2, x2 % b2, x3 % b2 );
c3.set( x1 % b3, x2 % b3, x3 % b3 );
}
示例4: v_quad_quality
/*!
multiple quality measures of a quad
*/
C_FUNC_DEF void v_quad_quality( int num_nodes, VERDICT_REAL coordinates[][3],
unsigned int metrics_request_flag, QuadMetricVals *metric_vals )
{
memset( metric_vals, 0, sizeof(QuadMetricVals) );
// for starts, lets set up some basic and common information
/* node numbers and side numbers used below
2
3 +--------- 2
/ +
/ |
3 / | 1
/ |
+ |
0 -------------+ 1
0
*/
// vectors for each side
VerdictVector edges[4];
make_quad_edges( edges, coordinates );
double areas[4];
signed_corner_areas( areas, coordinates );
double lengths[4];
lengths[0] = edges[0].length();
lengths[1] = edges[1].length();
lengths[2] = edges[2].length();
lengths[3] = edges[3].length();
VerdictBoolean is_collapsed = is_collapsed_quad(coordinates);
// handle collapsed quads metrics here
if(is_collapsed == VERDICT_TRUE && metrics_request_flag &
( V_QUAD_MINIMUM_ANGLE | V_QUAD_MAXIMUM_ANGLE | V_QUAD_JACOBIAN |
V_QUAD_SCALED_JACOBIAN ))
{
if(metrics_request_flag & V_QUAD_MINIMUM_ANGLE)
metric_vals->minimum_angle = v_tri_minimum_angle(3, coordinates);
if(metrics_request_flag & V_QUAD_MAXIMUM_ANGLE)
metric_vals->maximum_angle = v_tri_maximum_angle(3, coordinates);
if(metrics_request_flag & V_QUAD_JACOBIAN)
metric_vals->jacobian = (VERDICT_REAL)(v_tri_area(3, coordinates) * 2.0);
if(metrics_request_flag & V_QUAD_SCALED_JACOBIAN)
metric_vals->jacobian = (VERDICT_REAL)(v_tri_scaled_jacobian(3, coordinates) * 2.0);
}
// calculate both largest and smallest angles
if(metrics_request_flag & (V_QUAD_MINIMUM_ANGLE | V_QUAD_MAXIMUM_ANGLE)
&& is_collapsed == VERDICT_FALSE )
{
// gather the angles
double angles[4];
angles[0] = acos( -(edges[0] % edges[1])/(lengths[0]*lengths[1]) );
angles[1] = acos( -(edges[1] % edges[2])/(lengths[1]*lengths[2]) );
angles[2] = acos( -(edges[2] % edges[3])/(lengths[2]*lengths[3]) );
angles[3] = acos( -(edges[3] % edges[0])/(lengths[3]*lengths[0]) );
if( lengths[0] <= VERDICT_DBL_MIN ||
lengths[1] <= VERDICT_DBL_MIN ||
lengths[2] <= VERDICT_DBL_MIN ||
lengths[3] <= VERDICT_DBL_MIN )
{
metric_vals->minimum_angle = 360.0;
metric_vals->maximum_angle = 0.0;
}
else
{
// if smallest angle, find the smallest angle
if(metrics_request_flag & V_QUAD_MINIMUM_ANGLE)
{
metric_vals->minimum_angle = VERDICT_DBL_MAX;
for(int i = 0; i<4; i++)
metric_vals->minimum_angle = VERDICT_MIN(angles[i], metric_vals->minimum_angle);
metric_vals->minimum_angle *= 180.0 / VERDICT_PI;
}
// if largest angle, find the largest angle
if(metrics_request_flag & V_QUAD_MAXIMUM_ANGLE)
{
metric_vals->maximum_angle = 0.0;
for(int i = 0; i<4; i++)
metric_vals->maximum_angle = VERDICT_MAX(angles[i], metric_vals->maximum_angle);
metric_vals->maximum_angle *= 180.0 / VERDICT_PI;
if( areas[0] < 0 || areas[1] < 0 ||
areas[2] < 0 || areas[3] < 0 )
metric_vals->maximum_angle = 360 - metric_vals->maximum_angle;
}
}
}
// handle aspect, skew, taper, and area together
if( metrics_request_flag & ( V_QUAD_ASPECT | V_QUAD_SKEW | V_QUAD_TAPER ) )
//.........这里部分代码省略.........