⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 point.cc

📁 题描述的是一个旅行商要到几个城市去
💻 CC
字号:
/* $Id: point.cc,v 1.5 2006-08-21 15:02:00 jonathan Exp $ * Jonathan Ledlie, Harvard University. * Copyright 2006.  All rights reserved. */#include "sim.h"#include "point.h"int DIMENSIONS = 5;bool USE_HEIGHT = false;// Do not set to be larger than 1 (see checkHeight())const double MIN_HEIGHT = 0.01;const double INITIAL_VECTOR_VALUE = 0.;Point::Point (int s) {  stamp = s;}Point::Point () {  v = new double[DIMENSIONS];  for (int i = 0; i < DIMENSIONS; i++) {    v[i] = INITIAL_VECTOR_VALUE;  }  stamp = 0;  height = INITIAL_VECTOR_VALUE;}Point* Point::getRandomPoint (double sideLength) {  double vec[DIMENSIONS];  for (int d = 0; d < DIMENSIONS; d++) {    double s = Rand() * sideLength;    if (Rand() > .5)      s *= -1.;    vec[d] = s;  }  double height = 0.;  if (USE_HEIGHT) {    height = randPct();  }  return new Point (vec, height);}Point::Point (const double *vec, double h) {  v = new double[DIMENSIONS];  for (int i = 0; i < DIMENSIONS; i++) {    v[i] = vec[i];  }  stamp = 0;  height = h;}void Point::clear () {  for (int i = 0; i < DIMENSIONS; i++) {    v[i] = INITIAL_VECTOR_VALUE;  }  stamp = 0;  height = INITIAL_VECTOR_VALUE;}Point::Point (const Point *vec) {  v = new double[DIMENSIONS];  for (int i = 0; i < DIMENSIONS; i++) {    v[i] = vec->v[i];  }  stamp = vec->stamp;  height = vec->height;}Point::~Point () {  delete [] v;}bool Point::operator<(const Point *rhs) const {  return stamp < rhs->stamp;}Point* Point::getDirection (const Point *p) {  double coordDistance = getEuclideanDistance(p);  if (coordDistance == 0)    return NULL;  Point* unitVector = new Point();  for (int i = 0; i < DIMENSIONS; i++) {    unitVector->v[i] = (p->v[i] - v[i]) / coordDistance;  }  unitVector->height = (height + p->height) / coordDistance;  return unitVector;}double Point::getEuclideanDistance (const Point *b) {  return getPlanarDistance(b) + height + b->height;}double Point::getAbsoluteDistance (const Point *b) {  return getPlanarDistance(b) + fabs(height - b->height);}double Point::getPlanarDistance (const Point *b) {  double sum = 0.;  for (int i = 0; i < DIMENSIONS; i++) {    sum += pow (v[i]-b->v[i],2.);  }  if (sum == 0.) return 0.;  double dist = sqrt (sum);  if (isnan(dist)) {    cout << "sum " << sum << this << endl;  }  assert (!isnan(dist));  return dist;}double Point::length () {  double sum = 0;  for (int i = 0; i < DIMENSIONS; i++) {    sum += pow (v[i],2.);  }  return sqrt (sum) + height;}void Point::bump () {  for (int i = 0; i < DIMENSIONS; i++) {    v[i] = randPct();  }  if (USE_HEIGHT)    height = randPct();}void Point::assign (const Point *vec) {  for (int i = 0; i < DIMENSIONS; i++) {    v[i] = vec->v[i];  }  stamp = vec->stamp;  height = vec->height;}bool Point::isInInitialState () {  for (int i = 0; i < DIMENSIONS; i++) {    if (v[i] != INITIAL_VECTOR_VALUE)      return false;  }  if (height != INITIAL_VECTOR_VALUE)    return false;  return true;}void Point::scale (double s) {  for (int i = 0; i < DIMENSIONS; i++) {    v[i] = v[i] * s;  }  height *= s;}void Point::add (const Point *adjustment) {  for (int i = 0; i < DIMENSIONS; i++) {    v[i] = v[i] + adjustment->v[i];  }  height += adjustment->height;}void Point::checkHeight () {  while (USE_HEIGHT && height < MIN_HEIGHT) {    height = randPct();  }}Point* Point::getRandomUnitVector () {  Point* unitVector = new Point();  double length = 0.;  for (int i = 0; i < DIMENSIONS; i++) {    unitVector->v[i] = random();    length += unitVector->v[i] * unitVector->v[i];  }    length = sqrt(length);  for (int i = 0; i < DIMENSIONS; i++) {    unitVector->v[i] /= length;  }	  unitVector->height = 0;  if (USE_HEIGHT) {    unitVector->height = randPct();  }  return unitVector;}ostream& operator << (ostream& os, Point *p) {  os << "[";  for (int i = 0; i < DIMENSIONS; i++) {    os << p->v[i];    if (i < DIMENSIONS-1)      os << " ";  }  if (USE_HEIGHT)    os << " h " << p->height;  os << "]";  return os;}void Point::print (FILE *fp) {  for (int i = 0; i < DIMENSIONS; i++) {    fprintf (fp, "%5.3f", v[i]);    if (i < DIMENSIONS-1)      fprintf (fp," ");  }  if (USE_HEIGHT)    fprintf (fp," h %f", height);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -