本文整理汇总了C++中Normalize函数的典型用法代码示例。如果您正苦于以下问题:C++ Normalize函数的具体用法?C++ Normalize怎么用?C++ Normalize使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Normalize函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: return
const char* FileBrowser::Path(int index) {
const char* s = StringBrowser::String(index);
return (s == nil ) ? nil : Normalize(Concat(lastpath, s));
}
示例2: Normalize
Spectrum InfiniteAreaLight::Le(const RayDifferential &ray) const {
Vector3f w = Normalize(WorldToLight(ray.d));
Point2f st(SphericalPhi(w) * Inv2Pi, SphericalTheta(w) * InvPi);
return Spectrum(Lmap->Lookup(st), SpectrumType::Illuminant);
}
示例3: NormalizeDisplay
void NormalizeDisplay()
{
// kolor tła - zawartość bufora koloru
glClearColor(1.0, 1.0, 1.0, 1.0);
// czyszczenie bufora koloru i bufora głębokości
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// wybór macierzy modelowania
glMatrixMode(GL_MODELVIEW);
// macierz modelowania = macierz jednostkowa
glLoadIdentity();
// przesunięcie układu współrzędnych obiektu do środka bryły odcinania
glTranslatef(0, 0, -(near + far) / 2);
// obroty obiektu
glRotatef(rotatex, 1.0, 0, 0);
glRotatef(rotatey, 0, 1.0, 0);
// skalowanie obiektu - klawisze "+" i "-"
glScalef(scale, scale, scale);
// włączenie testu bufora głębokości
glEnable(GL_DEPTH_TEST);
// włączenie oświetlenia
glEnable(GL_LIGHTING);
// włączenie światła GL_LIGHT0 z parametrami domyślnymi
glEnable(GL_LIGHT0);
// właściwości materiału
glMaterialfv(GL_FRONT, GL_AMBIENT, ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, specular);
glMaterialf(GL_FRONT, GL_SHININESS, shininess);
// włączenie automatycznej normalizacji wektorów normalnych
// lub automatycznego skalowania jednostkowych wektorów normalnych
if (rescale_normal == true)
glEnable(GL_RESCALE_NORMAL);
else
glEnable(GL_NORMALIZE);
// początek definicji obiektu
glBegin(GL_TRIANGLES);
// generowanie obiektu gładkiego - jeden uśredniony
// wektor normalny na wierzchołek
if (normals == NORMALS_SMOOTH)
for (int i = 0; i < 4; i++)
{
// obliczanie wektora normalnego dla pierwszego wierzchołka
GLfloat n[3];
n[0] = n[1] = n[2] = 0.0;
// wyszukanie wszystkich ścian posiadających bie¿ący wierzchołek
for (int j = 0; j < 4; j++)
if (3 * triangles[3 * i + 0] == 3 * triangles[3 * j + 0] ||
3 * triangles[3 * i + 0] == 3 * triangles[3 * j + 1] ||
3 * triangles[3 * i + 0] == 3 * triangles[3 * j + 2])
{
// dodawanie wektorów normalnych poszczególnych ścian
GLfloat nv[3];
Normal(nv, j);
n[0] += nv[0];
n[1] += nv[1];
n[2] += nv[2];
}
// uśredniony wektor normalny jest normalizowany tylko, gdy biblioteka
// obsługuje automatyczne skalowania jednostkowych wektorów normalnych
if (rescale_normal == true)
Normalize(n);
glNormal3fv(n);
glVertex3fv(&vertex[3 * triangles[3 * i + 0]]);
// obliczanie wektora normalnego dla drugiego wierzchołka
n[0] = n[1] = n[2] = 0.0;
// wyszukanie wszystkich ścian posiadających bie¿ący wierzchołek
for (int j = 0; j < 4; j++)
if (3 * triangles[3 * i + 1] == 3 * triangles[3 * j + 0] ||
3 * triangles[3 * i + 1] == 3 * triangles[3 * j + 1] ||
3 * triangles[3 * i + 1] == 3 * triangles[3 * j + 2])
{
// dodawanie wektorów normalnych poszczególnych ścian
GLfloat nv[3];
Normal(nv, j);
n[0] += nv[0];
n[1] += nv[1];
n[2] += nv[2];
}
// uśredniony wektor normalny jest normalizowany tylko, gdy biblioteka
// obsługuje automatyczne skalowania jednostkowych wektorów normalnych
if (rescale_normal == true)
Normalize(n);
//.........这里部分代码省略.........
示例4: ray
bool Cone::Intersect(const Ray &r, float *tHit, float *rayEpsilon,
DifferentialGeometry *dg) const {
float phi;
Point phit;
// Transform _Ray_ to object space
Ray ray;
(*WorldToObject)(r, &ray);
// Compute quadratic cone coefficients
float k = radius / height;
k = k*k;
float A = ray.d.x * ray.d.x + ray.d.y * ray.d.y -
k * ray.d.z * ray.d.z;
float B = 2 * (ray.d.x * ray.o.x + ray.d.y * ray.o.y -
k * ray.d.z * (ray.o.z-height) );
float C = ray.o.x * ray.o.x + ray.o.y * ray.o.y -
k * (ray.o.z -height) * (ray.o.z-height);
// Solve quadratic equation for _t_ values
float t0, t1;
if (!Quadratic(A, B, C, &t0, &t1))
return false;
// Compute intersection distance along ray
if (t0 > ray.maxt || t1 < ray.mint)
return false;
float thit = t0;
if (t0 < ray.mint) {
thit = t1;
if (thit > ray.maxt) return false;
}
// Compute cone inverse mapping
phit = ray(thit);
phi = atan2f(phit.y, phit.x);
if (phi < 0.) phi += 2.f*M_PI;
// Test cone intersection against clipping parameters
if (phit.z < 0 || phit.z > height || phi > phiMax) {
if (thit == t1) return false;
thit = t1;
if (t1 > ray.maxt) return false;
// Compute cone inverse mapping
phit = ray(thit);
phi = atan2f(phit.y, phit.x);
if (phi < 0.) phi += 2.f*M_PI;
if (phit.z < 0 || phit.z > height || phi > phiMax)
return false;
}
// Find parametric representation of cone hit
float u = phi / phiMax;
float v = phit.z / height;
// Compute cone $\dpdu$ and $\dpdv$
Vector dpdu(-phiMax * phit.y, phiMax * phit.x, 0);
Vector dpdv(-phit.x / (1.f - v),
-phit.y / (1.f - v), height);
// Compute cone $\dndu$ and $\dndv$
Vector d2Pduu = -phiMax * phiMax *
Vector(phit.x, phit.y, 0.);
Vector d2Pduv = phiMax / (1.f - v) *
Vector(-phit.y, -phit.x, 0.);
Vector d2Pdvv(0, 0, 0);
// Compute coefficients for fundamental forms
float E = Dot(dpdu, dpdu);
float F = Dot(dpdu, dpdv);
float G = Dot(dpdv, dpdv);
Vector N = Normalize(Cross(dpdu, dpdv));
float e = Dot(N, d2Pduu);
float f = Dot(N, d2Pduv);
float g = Dot(N, d2Pdvv);
// Compute $\dndu$ and $\dndv$ from fundamental form coefficients
float invEGF2 = 1.f / (E*G - F*F);
Normal dndu = Normal((f*F - e*G) * invEGF2 * dpdu +
(e*F - f*E) * invEGF2 * dpdv);
Normal dndv = Normal((g*F - f*G) * invEGF2 * dpdu +
(f*F - g*E) * invEGF2 * dpdv);
// Initialize _DifferentialGeometry_ from parametric information
const Transform &o2w = *ObjectToWorld;
*dg = DifferentialGeometry(o2w(phit), o2w(dpdu), o2w(dpdv),
o2w(dndu), o2w(dndv), u, v, this);
// Update _tHit_ for quadric intersection
*tHit = thit;
// Compute _rayEpsilon_ for quadric intersection
*rayEpsilon = 5e-4f * *tHit;
return true;
}
示例5: Vector
void CLoad3DS::ComputeNormals(t3DModel *pModel)
{
CVector3 vVector1, vVector2, vNormal, vPoly[3];
// If there are no objects, we can skip this part
if(pModel->numOfObjects <= 0)
return;
// What are vertex normals? And how are they different from other normals?
// Well, if you find the normal to a triangle, you are finding a "Face Normal".
// If you give OpenGL a face normal for lighting, it will make your object look
// really flat and not very round. If we find the normal for each vertex, it makes
// the smooth lighting look. This also covers up blocky looking objects and they appear
// to have more polygons than they do. Basically, what you do is first
// calculate the face normals, then you take the average of all the normals around each
// vertex. It's just averaging. That way you get a better approximation for that vertex.
// Go through each of the objects to calculate their normals
for(int index = 0; index < pModel->numOfObjects; index++)
{
// Get the current object
t3DObject *pObject = &(pModel->pObject[index]);
// Here we allocate all the memory we need to calculate the normals
CVector3 *pNormals = new CVector3 [pObject->numOfFaces];
CVector3 *pTempNormals = new CVector3 [pObject->numOfFaces];
pObject->pNormals = new CVector3 [pObject->numOfVerts];
// Go though all of the faces of this object
for(int i=0; i < pObject->numOfFaces; i++)
{
// To cut down LARGE code, we extract the 3 points of this face
vPoly[0] = pObject->pVerts[pObject->pFaces[i].vertIndex[0]];
vPoly[1] = pObject->pVerts[pObject->pFaces[i].vertIndex[1]];
vPoly[2] = pObject->pVerts[pObject->pFaces[i].vertIndex[2]];
// Now let's calculate the face normals (Get 2 vectors and find the cross product of those 2)
vVector1 = Vector(vPoly[0], vPoly[2]); // Get the vector of the polygon (we just need 2 sides for the normal)
vVector2 = Vector(vPoly[2], vPoly[1]); // Get a second vector of the polygon
vNormal = Cross(vVector1, vVector2); // Return the cross product of the 2 vectors (normalize vector, but not a unit vector)
pTempNormals[i] = vNormal; // Save the un-normalized normal for the vertex normals
vNormal = Normalize(vNormal); // Normalize the cross product to give us the polygons normal
pNormals[i] = vNormal; // Assign the normal to the list of normals
}
//////////////// Now Get The Vertex Normals /////////////////
CVector3 vSum = {0.0, 0.0, 0.0};
CVector3 vZero = vSum;
int shared=0;
for (int i = 0; i < pObject->numOfVerts; i++) // Go through all of the vertices
{
for (int j = 0; j < pObject->numOfFaces; j++) // Go through all of the triangles
{ // Check if the vertex is shared by another face
if (pObject->pFaces[j].vertIndex[0] == i ||
pObject->pFaces[j].vertIndex[1] == i ||
pObject->pFaces[j].vertIndex[2] == i)
{
vSum = AddVector(vSum, pTempNormals[j]);// Add the un-normalized normal of the shared face
shared++; // Increase the number of shared triangles
}
}
// Get the normal by dividing the sum by the shared. We negate the shared so it has the normals pointing out.
pObject->pNormals[i] = DivideVectorByScaler(vSum, float(-shared));
// Normalize the normal for the final vertex normal
pObject->pNormals[i] = Normalize(pObject->pNormals[i]);
vSum = vZero; // Reset the sum
shared = 0; // Reset the shared
}
// Free our memory and start over on the next object
delete [] pTempNormals;
delete [] pNormals;
}
}
示例6: Angle
///===vecfunc========== ANGLE BETWEEN A-B-C ===================///
float Angle (vec2 A, vec2 B, vec2 C) {
vec2 Vector1 = Normalize (A-B);
vec2 Vector2 = Normalize (C-B);
return acosd (Vector1*Vector2);
}
示例7: OccupancyInTimeBins
//.........这里部分代码省略.........
}
FillNumberOfPads(*hc);
}
++numberOfPhysicsEvent;
if ( numberOfPhysicsEvent % 5000 == 0 )
cout << Form("%12d events processed : %12d physics %d used ones %d bad ones [ %d with MCH information ]",
numberOfEvents,numberOfPhysicsEvent,numberOfUsedEvents,numberOfBadEvents,numberOfEventsWithMCH) << endl;
Bool_t mchThere(kFALSE);
for ( int iDDL = 0; iDDL < AliDAQ::NumberOfDdls("MUONTRK") && !mchThere; ++iDDL )
{
rawReader->Reset();
rawReader->Select("MUONTRK",iDDL,iDDL);
if (rawReader->ReadHeader() )
{
if (rawReader->GetEquipmentSize() ) mchThere = kTRUE;
}
}
if ( mchThere)
{
++numberOfEventsWithMCH;
}
else
{
continue;
}
Int_t buspatchId;
UShort_t manuId;
UChar_t manuChannel;
UShort_t adc;
stream.First();
std::map<int,int> bpValues;
while ( stream.Next(buspatchId,manuId,manuChannel,adc,kTRUE) )
{
bpValues[buspatchId]++;
}
for ( std::map<int,int>::const_iterator it = bpValues.begin(); it != bpValues.end(); ++it )
{
const int& buspatchId = it->first;
const int& bpvalue = it->second;
TString bpName = Form("BP%04d",buspatchId);
for ( std::vector<int>::size_type is = 0; is < timeResolutions.size(); ++is )
{
TH1* h = hc->Histo(Form("/BUSPATCH/HITS/%ds/%s",timeResolutions[is],bpName.Data()));
if (!h)
{
cout << "histogram not found" << endl;
continue;
}
h->Fill(rawReader->GetTimestamp(),bpvalue);
}
}
for ( std::vector<int>::size_type is = 0; is < timeResolutions.size(); ++is )
{
TH1* h = hc->Histo(Form("Nevents%ds",timeResolutions[is]));
if (!h)
{
cout << "histogram not found" << endl;
continue;
}
h->Fill(rawReader->GetTimestamp());
}
}
// Group BP histograms per DE then DDL then Chamber then Station
for ( std::vector<int>::size_type is = 0; is < timeResolutions.size(); ++is )
{
GroupByDE(*hc,timeResolutions[is]);
GroupByDDL(*hc,timeResolutions[is]);
GroupByChamber(*hc,timeResolutions[is]);
GroupByStation(*hc,timeResolutions[is]);
}
// make normalized versions of the histograms
Normalize(*hc);
TFile* fout = new TFile(output,"RECREATE");
hc->Write("occ");
delete fout;
}
示例8: Normalize
void AltJacobi::Table::operator () (unsigned k,QType result[ /* p */ ]) const
{
for(unsigned i=0,p=this->p; i<p ;i++) result[i]=coeff(k,i,p);
Normalize(result,p);
}
示例9: TargetVector
void ship::Steering()
{
//static int i = 0;
if ((*Target).size()-1 == 0)return;
if (Destination > (int)((*Target).size() - 1))
{
Destination = 0;
}
// m_TopSpeed = 2.0f;
float Speed = 0;
X = false;
Y = false;
Vector2 TargetVector((*Target)[Destination]->m_x, (*Target)[Destination]->m_y);
Vector2 V;
Vector2 Pos(m_x, m_y);
Vector2 m_force;
Vector2 Velocity;
V = Normalize(TargetVector - Pos) * m_TopSpeed ;
m_force = V - Velocity;
Velocity = Velocity + m_force;
Pos = Pos + Velocity;
m_x = Pos.x;
m_y = Pos.y;
m_angle = atan2(Velocity.x,-Velocity.y);
m_angle *= 180 / (float)M_PI;
m_angle -= 90;
if (Pathing == false)
{
if (m_x <= (*Target)[Destination]->m_x + 10 && m_x >= (*Target)[Destination]->m_x - 10)
{
X = true;
};
if (m_y <= (*Target)[Destination]->m_y + 10 && m_y >= (*Target)[Destination]->m_y - 10)
{
Y = true;
};
}
else
{
if (m_x <= (*Target)[Destination]->m_x + 5 && m_x >= (*Target)[Destination]->m_x - 5)
{
X = true;
};
if (m_y <= (*Target)[Destination]->m_y + 5 && m_y >= (*Target)[Destination]->m_y - 5)
{
Y = true;
};
};
//m_Home = 2;
if (Pathing == false)
{
if (X && Y && Destination == m_Home)
{
Idle = true; AtDestination = true;
}
else if (X && Y)
{
Destination = m_Home; Collect(); AtDestination = true; Hull -= 4;
};
}
else if (Pathing == true)
{
while (true)
{
if (Path.size() <= 0)
{
return;
}
Destination = Path[0]->Index;
if (X == true && Y == true)
{
Path.erase(Path.begin());
Destination = Path[0]->Index;
X = false;
Y = false;
}
else
{
break;
}
}
};
}
示例10: Cleanup
/**
* Actually do the recognition using the specified language mode. If none
* is specified, the default language model in the CubeRecoContext is used.
* @return the sorted list of alternate answers
* @param word_mode determines whether recognition is done as a word or a phrase
*/
WordAltList *CubeObject::Recognize(LangModel *lang_mod, bool word_mode) {
if (char_samp_ == NULL) {
return NULL;
}
// clear alt lists
Cleanup();
// no specified language model, use the one in the reco context
if (lang_mod == NULL) {
lang_mod = cntxt_->LangMod();
}
// normalize if necessary
if (cntxt_->SizeNormalization()) {
Normalize();
}
// assume not de-slanted by default
deslanted_ = false;
// create a beam search object
if (beam_obj_ == NULL) {
beam_obj_ = new BeamSearch(cntxt_, word_mode);
}
// create a cube search object
if (srch_obj_ == NULL) {
srch_obj_ = new CubeSearchObject(cntxt_, char_samp_);
}
// run a beam search against the tesslang model
alt_list_ = beam_obj_->Search(srch_obj_, lang_mod);
// deslant (if supported by language) and re-reco if probability is low enough
if (cntxt_->HasItalics() == true &&
(alt_list_ == NULL || alt_list_->AltCount() < 1 ||
alt_list_->AltCost(0) > CubeUtils::Prob2Cost(kMinProbSkipDeslanted))) {
if (deslanted_beam_obj_ == NULL) {
deslanted_beam_obj_ = new BeamSearch(cntxt_);
}
if (deslanted_srch_obj_ == NULL) {
deslanted_char_samp_ = char_samp_->Clone();
if (deslanted_char_samp_ == NULL) {
fprintf(stderr, "Cube ERROR (CubeObject::Recognize): could not "
"construct deslanted CharSamp\n");
return NULL;
}
if (deslanted_char_samp_->Deslant() == false) {
return NULL;
}
deslanted_srch_obj_ = new CubeSearchObject(cntxt_, deslanted_char_samp_);
}
// run a beam search against the tesslang model
deslanted_alt_list_ = deslanted_beam_obj_->Search(deslanted_srch_obj_,
lang_mod);
// should we use de-slanted altlist?
if (deslanted_alt_list_ != NULL && deslanted_alt_list_->AltCount() > 0) {
if (alt_list_ == NULL || alt_list_->AltCount() < 1 ||
deslanted_alt_list_->AltCost(0) < alt_list_->AltCost(0)) {
deslanted_ = true;
return deslanted_alt_list_;
}
}
}
return alt_list_;
}
示例11: timeGetTime
//.........这里部分代码省略.........
pCamera->m_fAngleX += fRotateY;
pCamera->m_fAngleZ += fRotateX;
if(pCamera->GetLookMode()==ZCAMERA_MINIMAP) {
pCamera->m_fAngleX=max(pi/2+.1f,pCamera->m_fAngleX);
pCamera->m_fAngleX=min(pi-0.1f,pCamera->m_fAngleX);
}else {
static float lastanglex,lastanglez;
if(bRotateEnable)
{
// 정밀도 유지를 위해 0~2pi 로 유지
pCamera->m_fAngleZ = fmod(pCamera->m_fAngleZ,2*PI);
pCamera->m_fAngleX = fmod(pCamera->m_fAngleX,2*PI);
pCamera->m_fAngleX=max(CAMERA_ANGLEX_MIN,pCamera->m_fAngleX);
pCamera->m_fAngleX=min(CAMERA_ANGLEX_MAX,pCamera->m_fAngleX);
lastanglex=pCamera->m_fAngleX;
lastanglez=pCamera->m_fAngleZ;
}else
{
// 각도제한이 필요하다
pCamera->m_fAngleX=max(CAMERA_ANGLEX_MIN,pCamera->m_fAngleX);
pCamera->m_fAngleX=min(CAMERA_ANGLEX_MAX,pCamera->m_fAngleX);
pCamera->m_fAngleX=max(lastanglex-pi/4.f,pCamera->m_fAngleX);
pCamera->m_fAngleX=min(lastanglex+pi/4.f,pCamera->m_fAngleX);
pCamera->m_fAngleZ=max(lastanglez-pi/4.f,pCamera->m_fAngleZ);
pCamera->m_fAngleZ=min(lastanglez+pi/4.f,pCamera->m_fAngleZ);
}
}
ZCombatInterface* pCombatInterface = ZGetGameInterface()->GetCombatInterface();
if (pCombatInterface && !pCombatInterface->IsChat() &&
(pCamera->GetLookMode()==ZCAMERA_FREELOOK || pCamera->GetLookMode()==ZCAMERA_MINIMAP))
{
rvector right;
rvector forward=RCameraDirection;
CrossProduct(&right,rvector(0,0,1),forward);
Normalize(right);
const rvector up = rvector(0,0,1);
rvector accel = rvector(0,0,0);
if(ZIsActionKeyPressed(ZACTION_FORWARD)==true) accel+=forward;
if(ZIsActionKeyPressed(ZACTION_BACK)==true) accel-=forward;
if(ZIsActionKeyPressed(ZACTION_LEFT)==true) accel-=right;
if(ZIsActionKeyPressed(ZACTION_RIGHT)==true) accel+=right;
if(ZIsActionKeyPressed(ZACTION_JUMP)==true) accel+=up;
if(ZIsActionKeyPressed(ZACTION_USE_WEAPON)==true) accel-=up;
rvector cameraMove =
(pCamera->GetLookMode()==ZCAMERA_FREELOOK ? 1000.f : 10000.f ) // 미니맵모드는 빨리 움직임
* fElapsed*accel;
rvector targetPos = pCamera->GetPosition()+cameraMove;
// 프리룩은 충돌체크를 한다
if(pCamera->GetLookMode()==ZCAMERA_FREELOOK)
ZGetGame()->GetWorld()->GetBsp()->CheckWall(pCamera->GetPosition(),targetPos,ZFREEOBSERVER_RADIUS,0.f,RCW_SPHERE);
else
// 미니맵은 범위내에 있는지 체크한다
{
rboundingbox *pbb = &ZGetGame()->GetWorld()->GetBsp()->GetRootNode()->bbTree;
targetPos.x = max(min(targetPos.x,pbb->maxx),pbb->minx);
targetPos.y = max(min(targetPos.y,pbb->maxy),pbb->miny);
ZMiniMap *pMinimap = ZGetGameInterface()->GetMiniMap();
if(pMinimap)
targetPos.z = max(min(targetPos.z,pMinimap->GetHeightMax()),pMinimap->GetHeightMin());
else
targetPos.z = max(min(targetPos.z,7000),2000);
}
pCamera->SetPosition(targetPos);
}
else if ( !ZGetGame()->IsReplay())
{
pMyCharacter->ProcessInput( fElapsed);
}
}
}
POINT pt={RGetScreenWidth()/2,RGetScreenHeight()/2};
ClientToScreen(g_hWnd,&pt);
SetCursorPos(pt.x,pt.y);
// 대쉬 키 입력 검사
GameCheckSequenceKeyCommand();
}else
pMyCharacter->ReleaseButtonState(); // 메뉴가 나왔을때는 버튼이 눌리지 않은상태로 돌려놓는다
}
}
示例12: axis
void CCamera::SetViewByMouse()
{
POINT mousePos; // This is a window structure that holds an X and Y
int middleX = SCREEN_WIDTH >> 1; // This is a binary shift to get half the width
int middleY = SCREEN_HEIGHT >> 1; // This is a binary shift to get half the height
float angleY = 0.0f; // This is the direction for looking up or down
float angleZ = 0.0f; // This will be the value we need to rotate around the Y axis (Left and Right)
static float currentRotX = 0.0f;
// Get the mouse's current X,Y position
GetCursorPos(&mousePos);
// If our cursor is still in the middle, we never moved... so don't update the screen
if( (mousePos.x == middleX) && (mousePos.y == middleY) ) return;
// Set the mouse position to the middle of our window
SetCursorPos(middleX, middleY);
// Get the direction the mouse moved in, but bring the number down to a reasonable amount
angleY = (float)( (middleX - mousePos.x) ) / 500.0f;
angleZ = (float)( (middleY - mousePos.y) ) / 500.0f;
static float lastRotX = 0.0f;
lastRotX = currentRotX; // We store off the currentRotX and will use it in when the angle is capped
// Here we keep track of the current rotation (for up and down) so that
// we can restrict the camera from doing a full 360 loop.
currentRotX += angleZ;
// If the current rotation (in radians) is greater than 1.0, we want to cap it.
if(currentRotX > 1.0f)
{
currentRotX = 1.0f;
// Rotate by remaining angle if there is any
if(lastRotX != 1.0f)
{
// To find the axis we need to rotate around for up and down
// movements, we need to get a perpendicular vector from the
// camera's view vector and up vector. This will be the axis.
// Before using the axis, it's a good idea to normalize it first.
CVector3 vAxis = Cross(m_vView - m_vPosition, m_vUpVector);
vAxis = Normalize(vAxis);
// rotate the camera by the remaining angle (1.0f - lastRotX)
RotateView( 1.0f - lastRotX, vAxis.x, vAxis.y, vAxis.z);
}
}
// Check if the rotation is below -1.0, if so we want to make sure it doesn't continue
else if(currentRotX < -1.0f)
{
currentRotX = -1.0f;
// Rotate by the remaining angle if there is any
if(lastRotX != -1.0f)
{
// To find the axis we need to rotate around for up and down
// movements, we need to get a perpendicular vector from the
// camera's view vector and up vector. This will be the axis.
// Before using the axis, it's a good idea to normalize it first.
CVector3 vAxis = Cross(m_vView - m_vPosition, m_vUpVector);
vAxis = Normalize(vAxis);
// rotate the camera by ( -1.0f - lastRotX)
RotateView( -1.0f - lastRotX, vAxis.x, vAxis.y, vAxis.z);
}
}
// Otherwise, we can rotate the view around our position
else
{
// To find the axis we need to rotate around for up and down
// movements, we need to get a perpendicular vector from the
// camera's view vector and up vector. This will be the axis.
// Before using the axis, it's a good idea to normalize it first.
CVector3 vAxis = Cross(m_vView - m_vPosition, m_vUpVector);
vAxis = Normalize(vAxis);
// Rotate around our perpendicular axis
RotateView(angleZ, vAxis.x, vAxis.y, vAxis.z);
}
// Always rotate the camera around the y-axis
RotateView(angleY, 0, 1, 0);
}
示例13: parentWT0
void TrackerLinearFresnel::Evaluate( Vector3D sunVectorW, Transform parentWT0 )
{
Vector3D i = parentWT0( sunVectorW );
Vector3D localAxis;
Point3D focusPoint;
if( activeAxis.getValue() == 0 )
{
localAxis = Vector3D( 1.0, 0.0, 0.0 ) ;
focusPoint = Point3D( 0.0, axisOrigin.getValue()[0], axisOrigin.getValue()[1] ) ;
}
else if( activeAxis.getValue() == 1 )
{
localAxis = Vector3D( 0.0, 1.0, 0.0 );
focusPoint = Point3D( axisOrigin.getValue()[0], 0.0, axisOrigin.getValue()[1] ) ;
}
else
{
localAxis = Vector3D( 0.0, 0.0, 1.0 ) ;
focusPoint = Point3D( axisOrigin.getValue()[0], axisOrigin.getValue()[1], 0.0 ) ;
}
Vector3D focus = Vector3D( focusPoint );
if (typeOfAimingPoint.getValue() == 0 ) //Absolute
{
localAxis = parentWT0( localAxis );
focus = Vector3D( parentWT0( focusPoint ) );
}
double angle = 0.0;
//Dawann : in a Fresnel concentrator we use the project of the sun vector on the normal plan of the axis
//it= the projection of the sun on the normal plan of the axis...
if( localAxis == Vector3D( 1.0, 0.0, 0.0 ) )
{
Vector3D r = Normalize( Vector3D( 0.0, focus.y, focus.z ) );
Vector3D it = Normalize( Vector3D( 0.0, i.y, i.z ) );
Vector3D n = Normalize( it + r );
if( fabs( n.z ) > 0.0 ) angle = atan2( n.z, n.y );
}
else if( localAxis == Vector3D( 0.0, 1.0, 0.0 ) )
{
Vector3D r = Normalize( Vector3D( focus.x, 0.0, focus.z ) );
Vector3D it = Normalize( Vector3D( i.x, 0.0, i.z ) );
Vector3D n = Normalize( it + r );
if( fabs( n.z ) > 0.0 ) angle = - atan2( n.z, n.x );
}
else
{
Vector3D r = Normalize( Vector3D( focus.x, focus.y, 0.0 ) );
Vector3D it = Normalize( Vector3D( i.x, i.y, 0.0 ) );
Vector3D n = Normalize( it + r );
if( fabs( n.x ) > 0.0 ) angle = -atan2( n.x, n.y );
}
SbVec3f axis = SbVec3f( localAxis.x, localAxis.y, localAxis.z );
SoTransform* newTransform = new SoTransform();
newTransform->rotation.setValue( axis, angle );
SetEngineOutput(newTransform);
}
示例14: SinCosNormal
VECTOR4D SinCosNormal(float x, float y, float z) {
VECTOR4D N = { 0.3f * 3.0f * PI * sin(3.0f * x * PI) * sinf(3.0f * y * PI), -0.3f * 3.0f * PI * cosf(3.0f * x * PI) * cos(3.0f * y * PI), 1.0f, 0.0f };
N = Normalize(N);
return N;
}
示例15: skiplightreweightdraw
void skiplightreweightdraw()
{
float beta = 0.045;//110/50 = 0.28;//FEXGSP = 0.4
float gamma = 1.182;//110/50 = 1.24;//FEXGSP = 0.4
auto f= new TFile("skiplightreweight.root");
auto h12all = (TH1F *)f->Get("h12all");
auto h12fcr = (TH1F *)f->Get("h12fcr");
auto h12fex = (TH1F *)f->Get("h12fex");
auto h12gsp = (TH1F *)f->Get("h12gsp");
auto hSLall = (TH1F *)f->Get("hSLall");
auto hSLfcr = (TH1F *)f->Get("hSLfcr");
auto hSLfex = (TH1F *)f->Get("hSLfex");
auto hSLgsp = (TH1F *)f->Get("hSLgsp");
auto h12data = (TH1F *)f->Get("h12data");
auto hSLdata = (TH1F *)f->Get("hSLdata");
auto h12dphiall = (TH1F *)f->Get("h12dphiall");
auto h12dphifcr = (TH1F *)f->Get("h12dphifcr");
auto h12dphifex = (TH1F *)f->Get("h12dphifex");
auto h12dphigsp = (TH1F *)f->Get("h12dphigsp");
auto hSLdphiall = (TH1F *)f->Get("hSLdphiall");
auto hSLdphifcr = (TH1F *)f->Get("hSLdphifcr");
auto hSLdphifex = (TH1F *)f->Get("hSLdphifex");
auto hSLdphigsp = (TH1F *)f->Get("hSLdphigsp");
auto h12dphidata = (TH1F *)f->Get("h12dphidata");
auto hSLdphidata = (TH1F *)f->Get("hSLdphidata");
auto h12dphiNSall = (TH1F *)f->Get("h12dphiNSall");
auto h12dphiNSfcr = (TH1F *)f->Get("h12dphiNSfcr");
auto h12dphiNSfex = (TH1F *)f->Get("h12dphiNSfex");
auto h12dphiNSgsp = (TH1F *)f->Get("h12dphiNSgsp");
auto hSLdphiNSall = (TH1F *)f->Get("hSLdphiNSall");
auto hSLdphiNSfcr = (TH1F *)f->Get("hSLdphiNSfcr");
auto hSLdphiNSfex = (TH1F *)f->Get("hSLdphiNSfex");
auto hSLdphiNSgsp = (TH1F *)f->Get("hSLdphiNSgsp");
auto h12dphiNSdata = (TH1F *)f->Get("h12dphiNSdata");
auto hSLdphiNSdata = (TH1F *)f->Get("hSLdphiNSdata");
auto h12ordall = (TH1F *)f->Get("h12ordall");
auto h12ordfcr = (TH1F *)f->Get("h12ordfcr");
auto h12ordfex = (TH1F *)f->Get("h12ordfex");
auto h12ordgsp = (TH1F *)f->Get("h12ordgsp");
auto hSLordall = (TH1F *)f->Get("hSLordall");
auto hSLordfcr = (TH1F *)f->Get("hSLordfcr");
auto hSLordfex = (TH1F *)f->Get("hSLordfex");
auto hSLordgsp = (TH1F *)f->Get("hSLordgsp");
auto h12orddata = (TH1F *)f->Get("h12orddata");
auto hSLorddata = (TH1F *)f->Get("hSLorddata");
auto h12reweighted = (TH1F *)h12all->Clone("h12reweighted");
auto hSLreweighted = (TH1F *)hSLall->Clone("hSLreweighted");
h12reweighted->Reset();h12reweighted->SetTitle("h12reweighted");
hSLreweighted->Reset();hSLreweighted->SetTitle("hSLreweighted");
auto h12dphiNSreweighted = (TH1F *)h12dphiNSall->Clone("h12dphiNSreweighted");
auto hSLdphiNSreweighted = (TH1F *)hSLdphiNSall->Clone("hSLdphiNSreweighted");
h12dphiNSreweighted->Reset();h12dphiNSreweighted->SetTitle("h12dphiNSreweighted");
hSLdphiNSreweighted->Reset();hSLdphiNSreweighted->SetTitle("hSLdphiNSreweighted");
auto h12dphireweighted = (TH1F *)h12dphiall->Clone("h12dphireweighted");
auto hSLdphireweighted = (TH1F *)hSLdphiall->Clone("hSLdphireweighted");
h12dphireweighted->Reset();h12dphireweighted->SetTitle("h12dphireweighted");
hSLdphireweighted->Reset();hSLdphireweighted->SetTitle("hSLdphireweighted");
auto h12ordreweighted = (TH1F *)h12ordall->Clone("h12ordreweighted");
auto hSLordreweighted = (TH1F *)hSLordall->Clone("hSLordreweighted");
h12ordreweighted->Reset();h12ordreweighted->SetTitle("h12ordreweighted");
hSLordreweighted->Reset();hSLordreweighted->SetTitle("hSLordreweighted");
h12reweighted->Add(h12fex,h12gsp,beta,gamma);
h12reweighted->Add(h12fcr);
hSLreweighted->Add(hSLfex,hSLgsp,beta,gamma);
hSLreweighted->Add(hSLfcr);
h12dphireweighted->Add(h12dphifex,h12dphigsp,beta,gamma);
h12dphireweighted->Add(h12dphifcr);
hSLdphireweighted->Add(hSLdphifex,hSLdphigsp,beta,gamma);
hSLdphireweighted->Add(hSLdphifcr);
h12dphiNSreweighted->Add(h12dphiNSfex,h12dphiNSgsp,beta,gamma);
h12dphiNSreweighted->Add(h12dphiNSfcr);
hSLdphiNSreweighted->Add(hSLdphiNSfex,hSLdphiNSgsp,beta,gamma);
hSLdphiNSreweighted->Add(hSLdphiNSfcr);
h12ordreweighted->Add(h12ordfex,h12ordgsp,beta,gamma);
h12ordreweighted->Add(h12ordfcr);
hSLordreweighted->Add(hSLordfex,hSLordgsp,beta,gamma);
hSLordreweighted->Add(hSLordfcr);
Normalize({h12data,h12all,hSLdata,hSLall,
//.........这里部分代码省略.........