Changeset 1931 for GTP/trunk/Lib/Vis/Preprocessing/src/RssTree.cpp
- Timestamp:
- 01/02/07 16:12:46 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Vis/Preprocessing/src/RssTree.cpp
r1906 r1931 2629 2629 { 2630 2630 2631 if (1) { 2632 float param[5]; 2633 2634 for (int i=0; i < numberOfRays; i++) { 2635 mHalton.GetNext(5, param); 2636 GenerateRay(param, rays); 2637 } 2638 2639 return rays.size(); 2640 } 2641 2642 vector<RssTreeLeaf *> leaves; 2643 2644 Debug<<"Collecting leaves..."<<endl<<flush; 2645 CollectLeaves(leaves); 2646 Debug<<"done."<<endl<<flush; 2647 2648 2649 if (numberOfLeaves != leaves.size()) { 2650 Debug<<"sorting leaves..."<<endl<<flush; 2651 sort(leaves.begin(), 2652 leaves.end(), 2653 GreaterContribution); 2654 Debug<<"done."<<endl<<flush; 2655 } 2656 2657 2658 Debug<<"Evaluating leaf importance..."<<endl<<flush; 2659 2660 float sumContrib = 0.0; 2661 int i; 2662 int k = 0; 2663 for (i=0; i < leaves.size() && k < numberOfLeaves; i++) 2664 if (ValidLeaf(leaves[i])) { 2665 float c = leaves[i]->GetImportance(); 2666 sumContrib += c; 2667 // cout<<"ray contrib "<<i<<" : "<<c<<endl; 2668 k++; 2669 } 2670 2671 Debug<<"done."<<endl<<flush; 2672 2673 float avgContrib = sumContrib/numberOfLeaves; 2674 2675 // always generate at leat n ray per leaf 2676 int fixedPerLeaf = 1; 2677 // int fixedPerLeaf = 0; 2678 int fixed = fixedPerLeaf*(int)leaves.size(); 2679 2680 // check if the number of fixed is not too big 2681 2682 if (fixed >= numberOfRays/2) { 2683 fixedPerLeaf = 0; 2684 fixed = 0; 2685 } 2686 2687 int iGenerated = numberOfRays - fixed; 2688 float ratioPerLeaf = iGenerated /(avgContrib*numberOfLeaves); 2689 2690 k = 0; 2691 2692 Debug<<"generating leaf rays..."<<endl<<flush; 2693 2694 for (i=0; i < leaves.size() && k < numberOfLeaves; i++) 2695 if (ValidLeaf(leaves[i])) { 2696 RssTreeLeaf *leaf = leaves[i]; 2697 float c = leaf->GetImportance(); 2698 2699 int num = fixedPerLeaf + (int)(c*ratioPerLeaf + 0.5f); 2700 GenerateLeafRaysSimple(leaf, num, rays); 2701 2702 k++; 2703 } 2704 2705 Debug<<"done."<<endl<<flush; 2706 2707 return (int)rays.size(); 2631 float param[5]; 2632 2633 for (int i=0; i < numberOfRays; i++) { 2634 mHalton.GetNext(5, param); 2635 GenerateRay(param, rays); 2636 } 2637 2638 return rays.size(); 2639 2708 2640 } 2709 2641
Note: See TracChangeset
for help on using the changeset viewer.