Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/eireneh/bible/control/map/AntiGravityRule.java


1   
2   package com.eireneh.bible.control.map;
3   
4   import java.util.Vector;
5   
6   import com.eireneh.bible.passage.*;
7   import com.eireneh.bible.book.*;
8   import com.eireneh.bible.control.search.*;
9   
10  /**
11  * AntiGravityRule. 
12  * 
13  * <table border='1' cellPadding='3' cellSpacing='0' width="100%">
14  * <tr><td bgColor='white'class='TableRowColor'><font size='-7'>
15  * Distribution Licence:<br />
16  * Project B is free software; you can redistribute it
17  * and/or modify it under the terms of the GNU General Public License,
18  * version 2 as published by the Free Software Foundation.<br />
19  * This program is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22  * General Public License for more details.<br />
23  * The License is available on the internet
24  * <a href='http://www.gnu.org/copyleft/gpl.html'>here</a>, by writing to
25  * <i>Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
26  * MA 02111-1307, USA</i>, Or locally at the Licence link below.<br />
27  * The copyright to this program is held by it's authors.
28  * </font></td></tr></table>
29  * @see <a href='http://www.eireneh.com/servlets/Web'>Project B Home</a>
30  * @see docs.Licence
31  * @author Joe Walker
32  * @version D0.I0.T0
33  */
34  public class AntiGravityRule extends AbstractRule
35  {
36      /**
37      * Specify where it would like a node to be positioned in space.
38      * @param map The Map to select a node from
39      * @param ord The ordinal number (1 - 31104) of the verse
40      * @return An array of desired positions.
41      */
42      public Position[] getDesiredPosition(Map map, int ord)
43      {
44          if (scale == 0)
45              return new Position[] { };
46  
47          // The start point
48          float[] fpos = map.getPosition(ord);
49  
50          // Where we move away from
51          float[] cog = map.getCenterOfGravity().getPosition();
52  
53          // The desired position
54          float[] reply = new float[fpos.length];
55          for (int i=0; i<fpos.length; i++)
56          {
57              float distance = fpos[i] - cog[i];
58              reply[i] = (0.3F * (float) Math.atan(distance*GRADIENT)) + 0.5F;
59          }
60  
61          return scale(new Position(reply));
62      }
63  
64      /** How sharply do we fall away with the result curve */
65      private static final float GRADIENT = 10F;
66  }