当前位置: 首页>>代码示例>>C++>>正文


C++ Vector_3::squared_norm方法代码示例

本文整理汇总了C++中Vector_3::squared_norm方法的典型用法代码示例。如果您正苦于以下问题:C++ Vector_3::squared_norm方法的具体用法?C++ Vector_3::squared_norm怎么用?C++ Vector_3::squared_norm使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Vector_3的用法示例。


在下文中一共展示了Vector_3::squared_norm方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: ene


//.........这里部分代码省略.........

    // Initialize values of nodal_vals_pane to 0.
    for ( int d=1; d<=ncomp; ++d) {
      COM::DataItem *nvpi = ncomp==1?nodal_vals_pane:(nodal_vals_pane+d);
      Real *p=reinterpret_cast<Real*>(nvpi->pointer());
      for ( int j=0,s=nvpi->stride(),n=nvpi->size_of_real_items()*s; j<n; j+=s)
	p[j] = 0.;
    }

    // Loop through the elements of the pane
    Element_node_enumerator ene( &pane, 1); 
    for ( int j=pane.size_of_real_elements(); j>0; --j, ene.next()) {
      ps.set( pnts, ene, 1);
      elem_vals_evk.set( elem_vals_pane, ene);
      nodal_vals_evk.set( nodal_vals_pane, ene);
      nodal_weights_evk.set( weights_ptrs[i], ene, weights_strds[i]);

      int ne=ene.size_of_edges();
      int nn=ene.size_of_nodes();
      Real w = 1.;
      switch ( scheme) {
      case E2N_USER:
      case E2N_AREA:
	if ( scheme == E2N_USER) {
	  // Use user specified weights.
	  elem_weights_evk.set( elem_weights_pane, ene);
	  w = elem_weights_evk[0];
	} // Continue to the case of E2N_ONE
	else { 
	  Generic_element_2 e(ne, nn);
	  e.Jacobian( ps, nc, J);
	  
	  const Vector_3<Real> v = Vector_3<Real>::cross_product( J[0], J[1]);
	  w = std::sqrt(v.squared_norm());
	  if ( ne==3) w*=0.5;
	}  // Continue to the case of E2N_ONE
      case E2N_ONE: {
	// Update nodal weights
	for ( int k=0; k<nn; ++k)
	  nodal_weights_evk[k] += w;
	
	// Update nodal sums
	for ( int d=0; d<ncomp; ++d) {
	  Real t = w*elem_vals_evk(0,d);
	  for ( int k=0; k<nn; ++k)
	    nodal_vals_evk(k,d) += t;
	}
	break;
      }
      case E2N_ANGLE:
      case E2N_SPHERE: {
	for ( int k=0; k<ne; ++k) { 
	  J[0] = ps[k==ne-1?0:k+1]-ps[k]; J[1] = ps[k?k-1:ne-1]-ps[k]; 
	  double s = std::sqrt((J[0]*J[0])*(J[1]*J[1]));
	  if ( s>0) {
	    double cosw = J[0]*J[1]/s; 
	    if (cosw>1) cosw=1; else if ( cosw<-1) cosw=-1;
	    w = std::acos( cosw);

	    if ( scheme==SURF::E2N_SPHERE)
	      w = std::sin(w)/s; 

	    // Update nodal weights
	    nodal_weights_evk[k] += w;
	    
	    // Update nodal sums
开发者ID:xyuan,项目名称:IMPACT,代码行数:67,代码来源:Manifold_2.C


注:本文中的Vector_3::squared_norm方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。