void test8() { SList list1; list1.PushBack(1); list1.PushBack(2); list1.PushBack(3); list1.PushBack(4); list1.PushBack(5); list1.PushBack(6); SList list2; list2.PushBack(4); list2.PushBack(5); list2.PushBack(6); Node *p = list2.GetTail(); p->_next = list1.GetHead(); cout << CheckCross(list1.GetHead(), list2.GetHead()) << endl; }
// // 矩形与三角形是否相交。 // // 参数1: 三角形点1。 // // 参数2: 三角形点2。 // // 参数3: 三角形点3。 // // 参数1: 矩形点1。 // // 参数2: 矩形点2。 // // 参数3: 矩形点3。 // // 参数4: 矩形点4。 // // 返回值:1 相交, 0 不相交。 // bool FairyEditorFrame::Is_Rectangle_Triangle_Intersect( POINT_3D triP1, POINT_3D triP2, POINT_3D triP3, POINT_3D recP1, POINT_3D recP2, POINT_3D recP3, POINT_3D recP4 ) { // 先判断三角形是否在矩形内部。 // 判断点1 if((triP1.fx >= recP1.fx - OFFEET )&&(triP1.fx <= recP2.fx + OFFEET)&&(triP1.fz >= recP1.fz - OFFEET)&&(triP1.fz <= recP3.fz + OFFEET)) { return true; } // 判断点2 if((triP2.fx >= recP1.fx - OFFEET )&&(triP2.fx <= recP2.fx + OFFEET)&&(triP2.fz >= recP1.fz - OFFEET)&&(triP2.fz <= recP3.fz + OFFEET)) { return true; } // 判断点3 if((triP3.fx >= recP1.fx - OFFEET )&&(triP3.fx <= recP2.fx + OFFEET)&&(triP3.fz >= recP1.fz - OFFEET)&&(triP3.fz <= recP3.fz + OFFEET)) { return true; } // 判断四方形的点是否在三角形内 // 判断点1 if(IsPointInTriangle(recP1, triP1, triP2, triP3)) { return true; } // 判断点2 if(IsPointInTriangle(recP2, triP1, triP2, triP3)) { return true; } // 判断点3 if(IsPointInTriangle(recP3, triP1, triP2, triP3)) { return true; } // 判断点4 if(IsPointInTriangle(recP4, triP1, triP2, triP3)) { return true; } // 判断直线是否相交。 if(CheckCross(recP1, recP2, triP1, triP2)) { return true; } // 判断直线是否相交。 if(CheckCross(recP1, recP2, triP2, triP3)) { return true; } // 判断直线是否相交。 if(CheckCross(recP1, recP2, triP3, triP1)) { return true; } // 判断直线是否相交。 if(CheckCross(recP2, recP3, triP1, triP2)) { return true; } // 判断直线是否相交。 if(CheckCross(recP2, recP3, triP2, triP3)) { return true; } // 判断直线是否相交。 if(CheckCross(recP2, recP3, triP3, triP1)) { return true; } // 判断直线是否相交。 if(CheckCross(recP3, recP4, triP1, triP2)) { return true; } // 判断直线是否相交。 if(CheckCross(recP3, recP4, triP2, triP3)) { return true; } // 判断直线是否相交。 if(CheckCross(recP3, recP4, triP3, triP1)) { return true; } // 判断直线是否相交。 if(CheckCross(recP4, recP1, triP1, triP2)) { return true; } // 判断直线是否相交。 if(CheckCross(recP4, recP1, triP2, triP3)) { return true; } // 判断直线是否相交。 if(CheckCross(recP4, recP1, triP3, triP1)) { return true; } return false; }
bool ZEffectAniMesh::Draw(unsigned long int nTime) { if(m_VMesh.m_pMesh==NULL) return false; AniFrameInfo* pInfo = m_VMesh.GetFrameInfo(ani_mode_lower); if(pInfo->m_pAniSet==NULL)// m_VMesh.m_pAniSet[0]==NULL return false; if(nTime < m_nStartTime + m_nStartAddTime) { return true; } // 그리기가 연기 된경우 지금 상태의 캐릭터 데이터를 참조.. if( m_bDelay && !m_isCheck ) { ZObject* pObj = ZGetObjectManager()->GetObject(m_uid); ZCharacterObject* pCObj = MDynamicCast(ZCharacterObject, pObj); if(pCObj) { if(!pCObj->IsRendered()) return false; rvector _vp = pCObj->GetPosition(); rvector _vdir = pCObj->m_Direction; _vdir.z = 0; Normalize(_vdir); /* int cm = g_pGame->SelectSlashEffectMotion(pObj);//남녀 칼 휘두르는 방향 if(cm==SEM_ManSlash5) { _vdir.z = 0.f; _vp += _vdir * 120.f; _vp.z -= 100.f; } else if(cm==SEM_WomanSlash5) { _vdir.z = 0.f; _vp += _vdir * 200.f; _vp.z -= 80.f; } */ m_Pos = _vp; m_Dir = _vdir; } m_isCheck = true; } DWORD dwDiff = nTime - m_nStartTime; // float fSec = (float)dwDiff/1000.0f; // float fOpacity = (SC_LIFETIME-dwDiff)/(float)SC_LIFETIME; rvector Dir; rvector Up=m_Up; if (m_nAlignType == 0) { Dir = -RCameraDirection; } else if( m_nAlignType == 1 ) { Dir = m_DirOrg; } else if( m_nAlignType == 2 ) { Dir = rvector( 0,1,0 ); Up = rvector( 0,0,1 ); } CheckCross(Dir,Up); rmatrix World; MakeWorldMatrix(&World, m_Pos, Dir, Up); rmatrix Rotation; D3DXMatrixRotationZ(&Rotation,m_fRotateAngleZ); World = Rotation * World; D3DXMatrixRotationY(&Rotation,m_fRotateAngleY); World = Rotation * World; m_VMesh.SetScale(m_Scale); m_VMesh.SetWorldMatrix(World); m_VMesh.Frame(); // 시간은 흘러 가야 한다~ if(m_bRender) { m_VMesh.Render(); m_bisRendered = m_VMesh.m_bIsRender; } else m_bisRendered = false; if( m_nAutoAddEffect != ZEffectAutoAddType_None ) { rvector vPos; RMeshNode* pNode = NULL; if(m_nAutoAddEffect == ZEffectAutoAddType_Methor ) { pNode = m_VMesh.m_pMesh->GetMeshData("methor"); vPos.x = pNode->m_mat_result._41; vPos.y = pNode->m_mat_result._42; vPos.z = pNode->m_mat_result._43; // static rmatrix _mrot = RGetRotY(180) * RGetRotX(90); static rmatrix _mrot = RGetRotX(90); vPos = vPos * _mrot; vPos += m_Pos; if(m_vBackupPos != vPos) { ZGetEffectManager()->AddTrackMethor(vPos); m_vBackupPos = vPos; } } } if( m_nLifeTime != -1 && m_bLoopType ) {// 소멸 시간이 정해져 있고..에니메이션이 루프 타잎인 경우.. if(m_VMesh.isOncePlayDone()) if(nTime > m_nStartTime + m_nLifeTime) { return false; } } else { if(m_VMesh.isOncePlayDone()) { return false; } } return true; }