private double calcDistance(List<Point2d> points) { if (points == null || points.size() < 2) { return 0d; } double distance = 0; Point2d b = points.get(0); for (int i = 1; i < points.size(); i++) { Point2d e = points.get(i); distance = distance + e.distance(b); b = e; } return distance; }
public static double distanceToAtom(IAtom atom, Point2d p) { if (atom == null) { return Double.MAX_VALUE; } else { return atom.getPoint2d().distance(p); } }
public static double distanceToBond(IBond bond, Point2d p) { if (bond == null) { return Double.MAX_VALUE; } else { return bond.get2DCenter().distance(p); } }
private double pointLineDistance(Point2d p1, Point2d p2, Point2d p3) { Point2d p = this.project(p1, p2, p3); return p3.distance(p); }
private double pointLineDistance(Point2d p1, Point2d p2, Point2d p3) { Point2d p = project(p1, p2, p3); return p3.distance(p); }
public static double[] createTextureOffsets(List<CrossSectionElement> crossSection) { double[] ret = new double[crossSection.size()]; ret[0] = 0; for (int i = 1; i < crossSection.size(); i++) { Point2d p1 = crossSection.get(i - 1).getP(); Point2d p2 = crossSection.get(i).getP(); ret[i] = ret[i - 1] + p1.distance(p2); } return ret; }
private static double calcWallPartLength(WallPart wp) { double wallLength = 0; List<WallNode> nodes = wp.getNodes(); int size = nodes.size(); WallNode n1 = nodes.get(0); for (int i = 1; i < size; i++) { WallNode n2 = nodes.get(i); wallLength += n1.getPoint().distance(n2.getPoint()); n1 = n2; } return wallLength; }
public double getEccentricity() { Point2d edgePoint = findEdgePoint(getX(), getY()); return Math.max(1e-3, distance(origin) / edgePoint.distance(origin)); }
private double medianBondLength(Collection<IBond> bonds) { if (bonds.isEmpty()) return 1.5; int nBonds = 0; double[] lengths = new double[bonds.size()]; for (IBond bond : bonds) { Point2d p1 = bond.getBegin().getPoint2d(); Point2d p2 = bond.getEnd().getPoint2d(); // watch out for overlaid atoms (occur in multiple group Sgroups) if (!p1.equals(p2)) lengths[nBonds++] = p1.distance(p2); } Arrays.sort(lengths, 0, nBonds); return lengths[nBonds / 2]; }
private double medianBondLength(Collection<IBond> bonds) { if (bonds.isEmpty()) return 1.5; int nBonds = 0; double[] lengths = new double[bonds.size()]; for (IBond bond : bonds) { Point2d p1 = bond.getBegin().getPoint2d(); Point2d p2 = bond.getEnd().getPoint2d(); // watch out for overlaid atoms (occur in multiple group Sgroups) if (!p1.equals(p2)) lengths[nBonds++] = p1.distance(p2); } Arrays.sort(lengths, 0, nBonds); return lengths[nBonds / 2]; }
IRenderingElement generateDashedBond(IAtom from, IAtom to) { final Point2d fromPoint = from.getPoint2d(); final Point2d toPoint = to.getPoint2d(); final double start = hasDisplayedSymbol(from) ? fromPoint.distance(backOffPoint(from, to)) : Double.NEGATIVE_INFINITY; final double end = hasDisplayedSymbol(to) ? fromPoint.distance(backOffPoint(to, from)) : Double.POSITIVE_INFINITY; return generateDashedBond(fromPoint, toPoint, start, end); }
public void mouseClickedDown(Point2d worldCoord) { JChemPaintRendererModel model = chemModelRelay.getRenderer().getRenderer2DModel(); double dH = model.getHighlightDistance() / model.getScale(); IAtom closestAtom = chemModelRelay.getClosestAtom(worldCoord); if(closestAtom == null || closestAtom.getPoint2d().distance(worldCoord) > dH) startAtom = null; else startAtom = chemModelRelay.getClosestAtom(worldCoord); }
@Test public void chembl12276() throws Exception { SmilesParser sp = new SmilesParser(SilentChemObjectBuilder.getInstance()); IAtomContainer mol = sp.parseSmiles("[Cl-].C(C1=CC=CC2=C(C=CC=C12)[N+](=O)[O-])[N+](C)(CCCl)CCCl"); layout(mol); for (IAtom atom : mol.atoms()) assertNotNull(atom.getPoint2d()); assertThat(mol.getAtom(0).getAtomicNumber(), is(17)); assertThat(mol.getAtom(15).getAtomicNumber(), is(7)); assertThat(mol.getAtom(0).getPoint2d().distance(mol.getAtom(15).getPoint2d()), closeTo(1.5*SDG.getBondLength(), 0.001)); }
@Test public void ionicBondsInAlCl3() throws Exception { SmilesParser sp = new SmilesParser(SilentChemObjectBuilder.getInstance()); IAtomContainer mol = sp.parseSmiles("[Al+3].[Cl-].[Cl-].[Cl-]"); layout(mol); for (IAtom atom : mol.atoms()) assertNotNull(atom.getPoint2d()); assertThat(mol.getAtom(0).getPoint2d().distance(mol.getAtom(1).getPoint2d()), closeTo(1.5*SDG.getBondLength(), 0.001)); assertThat(mol.getAtom(0).getPoint2d().distance(mol.getAtom(2).getPoint2d()), closeTo(1.5*SDG.getBondLength(), 0.001)); assertThat(mol.getAtom(0).getPoint2d().distance(mol.getAtom(3).getPoint2d()), closeTo(1.5*SDG.getBondLength(), 0.001)); }
@Test public void ionicBondsInK2CO3() throws Exception { SmilesParser sp = new SmilesParser(SilentChemObjectBuilder.getInstance()); IAtomContainer mol = sp.parseSmiles("[K+].[O-]C(=O)[O-].[K+]"); layout(mol); for (IAtom atom : mol.atoms()) assertNotNull(atom.getPoint2d()); assertThat(mol.getAtom(0).getPoint2d().distance(mol.getAtom(1).getPoint2d()), closeTo(1.5*SDG.getBondLength(), 0.001)); assertThat(mol.getAtom(4).getPoint2d().distance(mol.getAtom(5).getPoint2d()), closeTo(1.5*SDG.getBondLength(), 0.001)); }
@Test public void ionicBondsInLiAlH4() throws Exception { SmilesParser sp = new SmilesParser(SilentChemObjectBuilder.getInstance()); IAtomContainer mol = sp.parseSmiles("[Li+].[Al+3].[Cl-].[Cl-].[Cl-].[Cl-]"); layout(mol); for (IAtom atom : mol.atoms()) assertNotNull(atom.getPoint2d()); for (int i = 2; i < 5; i++) { double distLi = mol.getAtom(0).getPoint2d().distance(mol.getAtom(i).getPoint2d()); double distAl = mol.getAtom(1).getPoint2d().distance(mol.getAtom(i).getPoint2d()); double diffLi = distLi - 1.5*SDG.getBondLength(); double diffAl = distAl - 1.5*SDG.getBondLength(); if (Math.abs(diffLi) > 0.001 && Math.abs(diffAl) > 0.001) fail("Chlorine must be bond length from Al or Li atoms"); } }
@Test public void calciumOxide() throws Exception { SmilesParser sp = new SmilesParser(SilentChemObjectBuilder.getInstance()); IAtomContainer mol = sp.parseSmiles("[Ca+2].[O-2]"); layout(mol); for (IAtom atom : mol.atoms()) assertNotNull(atom.getPoint2d()); assertThat(mol.getAtom(0).getPoint2d().distance(mol.getAtom(1).getPoint2d()), closeTo(1.5*SDG.getBondLength(), 0.001)); }
@Test public void ionicBondsInSodiumBenzoate() throws Exception { SmilesParser sp = new SmilesParser(SilentChemObjectBuilder.getInstance()); IAtomContainer mol = sp.parseSmiles("[Na+].[O-]C(=O)c1ccccc1"); layout(mol); for (IAtom atom : mol.atoms()) assertNotNull(atom.getPoint2d()); assertThat(mol.getAtom(0).getPoint2d().distance(mol.getAtom(1).getPoint2d()), closeTo(1.5*SDG.getBondLength(), 0.001)); }