You are on page 1of 10

Project Objectives

Designing of Horizontal Alignment of Highway connecting two cities and passing through an obligatory point. The Horizontal Alignment design will be carried out while adhering to the standards stipulated by Indian Roads Congress. The code to solve the optimisation problem will be developed and executed in C++ environment. The final output would be presented in a tabulated form containing x and y coordinates.

Utility of the Project


The solution (in the form of the code) will prove to be a very vital tool to solve a practical problem the transportation engineers face every now and then. It is very often that engineers need to develop roadways to connect two towns while serving a third town (obligatory point). All this to be done while keeping in mind the budgetary constraints, which is directly related to the length of the proposed roadway. Thus, it is not just important to design a roadway but also to design the one which is the shortest in length. In short, it is crucial to strike the right balance between costeffectiveness, comfort for the passenger and compliance with the standards.

Literature Review
While undertaking the research-work for the project we have used concepts and methodologies from several sources as below: Studied the standards for Horizontal Alignment of Highways as prescribed in the Manual of Specification & Standards published by the Planning Commission of India, New Delhi (IRC:SP:73-2007). Reviewed chapters on Horizontal Highway Alignment in the NPTEL- IIT Bombay module written by Prof. Tom V. Matthew and Prof. K.V.K. Rao. Analysed the relevant material in the book Introduction to Transportation Engineering written by James H. Banks.

Theory Horizontal Transition curves


Transition curve is provided to change the horizontal alignment from straight to circular curve gradually and has a radius which decreases from infinity at the straight end (tangent point) to the desired radius of the circular curve at the other end (curve point). Some of the merits of providing a transition curve are: To introduce gradually the centrifugal force between the tangent point and the beginning of the circular curve, avoiding sudden jerk on the vehicle. This increases the comfort of passengers. To provide gradual introduction of super elevation and extra widening To enhance the aesthetic appearance of the road.

TS: point of change from tangent to spiral SC: point of change from spiral to circle CS: point of change from circle to spiral ST: point of change from spiral to tangent l: spiral arc length from TS to any point on the spiral ls: total length of spiral from TS to SC Thetas: the spiral angle = central angle of spiral arc l s Delta: total central angle of the circular curve p: offset from the initial tangent to the PC of the shifted circular curve

Type of Transition Curve


Different types of transition curves are spiral or clothoid, cubic parabola, and lemniscate. IRC recommends spiral as the transition curve because: It fulfils the requirement of an ideal transition curve, that is Rate of change or centrifugal acceleration is consistent (smooth) and Radius of the transition curve is infinity at the straight edge and changes to R at the curve point and calculation and field implementation is very easy.

Length of Transition Curve


The length of the transition curve should be determined as the maximum of the following three criteria: rate of change of centrifugal acceleration, rate of change of super-elevation, and an empirical formula given by IRC. Rate of change of centrifugal acceleration At the tangent point, radius is infinity and hence centrifugal acceleration is zero. At the end of the transition, the radius R has minimum value R. The rate of change of centrifugal acceleration should be adopted such that the design should not cause discomfort to the drivers. If c is the rate of change of centrifugal acceleration:

Therefore the length of the transition curve is:

The empirical formula for c is

Where cmin= 0.5, cmax=0.8 Rate of introduction of super-elevation Raise (E) of the outer edge with respect to inner edge is given by E = eB = e(W +We). The rate of change of this raise from 0 to E is achieved gradually with a gradient of 1 in N over the length of the transition curve (typical range of N is 60-150). Therefore, the length of the transition curve Ls2 is: Ls2 = Ne*(W +We)

Empirical formula IRC suggests a minimum length of the transition curve for a plain and rolling terrain:

The length of the transition curve is then determined by:

Instructions for the user


The user is supposed to enter the design speed, superelevation, friction co-efficient and the exact position of the obligatory point. The program works its way from this given information and comes out with the shortest route connecting the 2 points. For the purpose of simplifying the problem, we fix the coordinates of the two cities A(0,0) and B(10,0). User will be required to enter the co-ordinates of the obligatory point C(x,y). We are only considering the obligatory points which lie on the perpendicular bisector of the line joining the 2 cities. This means that x=5. We have split the total path into 3 components: 1. Straight line 2. Transition Curve 3. Circular Curve Since the path will be symmetric we analyse only one half of the path and just double it to find the length of the total path.

Outline of the Algorithm


We start from assuming a radius and an arc angle for the circular curve, which gives us the length of the circular curve. Using those co-ordinates and the equations of the transition curve, we find the length of the transition curve and finally the straight part. Finally we sum them up to find the total length of the path. We keep on varying the radius and the arc angle and compare the different path lengths we get and find the least of all. The output is the minimum path length and the lengths of each individual part. The coordinates of the transition curve are also the part of the output. More information about the algorithm will be explained during the presentation.

Inferences from the results


One of the important observations after analysing the results of the code came out to be the fact that arc angle always came out to be 0.1 degrees when the minimum path length is reached. This is because of the fact that during the making the program, the minimum value of the arc angle is kept to be 0.1 degrees. If we lower that value, say to 0.01 degree, the output shows 0.01 degree in the minimum path. This means that when the minimum path length is reached, the circular part of the path is reduced to a point on the transition curve. Hence the minimum part consists of only 2 parts: A straight line and a transition curve with the circular part reduced to such an extent that it becomes essentially a point. We have given 2 different sample input and the output to both of them is shown. Dev C++, a free IDE was used in the project for coding. The C++ code and sample input and output follows:

#include <iostream> #include<stdio.h> #include<conio.h> #include<math.h> using namespace std; int main() { float v,e,f,y,flag,td=10000000,x2,y2,a; float flag1=td,thetar,st,ls; flag=td; cout<<"This Program calculates the minimum path length between 2 cities 10 kms apart"<<endl<<"with an obligatory point between them. The X coordinate of the obligatory point is assumed to be 5. "; cout <<endl<<endl<< "Enter design speed (kmph) : "; cin >> v; cout << "Enter superelevation: "; cin >> e; cout << "Enter friction co-efficient: "; cin >> f; cout << "Enter the y co-ordinate of the obligatory point (in km): "; cin >> y; y=y*1000; // converting km to metres float theta,r,rmin=(v*v)/(127*(e+f)); // Finding the ruling minimum radius in metres cout<<endl<<"OUTPUT:"<<endl; cout << "The Ruling minimum radius is: " <<rmin; r=rmin; theta=0.1; float x,x1,y1,cx,cy; v=v*5/18; do { do { thetar=theta*(3.14159/180); x=5000; x1= x-r*sin(thetar); y1= y-r*(1-cos(thetar)); float ls1=(v*v*v*(75+3.6*v))/(r*80); float ls2=150*e*7.5/2; float ls3=35*v*v/r; ls=max(ls1,ls2);

ls=max(ls,ls3); float a=r*ls; float x2,y2; x2=(ls-(pow(ls,5)/(40*a*a))+(pow(ls,9)/(3456*a*a*a*a))); y2=((pow(ls,3)/(6*a))(pow(ls,7)/(336*a*a*a))+(pow(ls,11)/(42240*pow(a,5)))); cx=x1-x2; cy=y1-y2; st=sqrt((cx*cx)+(cy*cy)); td= (st+ls+(r*thetar)); if(td>flag) break; flag=min(flag,td); theta=theta+0.1; } while(theta<=90); if(flag>flag1) break; r=r+1; theta=0.1; flag1=min(flag1,flag); } while(r<=1000); float ans=flag1; cout<<endl<<"Total minimum distance : "<<ans*2; theta=0.1; flag=1000000; flag1=flag; r=rmin; do { do { thetar=theta*(3.14159/180); x=5000; x1= x-r*sin(thetar); y1= y-r*(1-cos(thetar)); float ls1=(v*v*v*(75+3.6*v))/(r*80); float ls2=150*e*7.5/2; float ls3=35*v*v/r; ls=max(ls1,ls2); ls=max(ls,ls3); a=r*ls; x2=(ls-(pow(ls,5)/(40*a*a))+(pow(ls,9)/(3456*a*a*a*a)));

y2=((pow(ls,3)/(6*a))(pow(ls,7)/(336*a*a*a))+(pow(ls,11)/(42240*pow(a,5)))); cx=x1-x2; cy=y1-y2; st=sqrt((cx*cx)+(cy*cy)); td= (st+ls+(r*thetar)); if(td==ans) break; flag=min(flag,td); theta=theta+0.1; } while(theta<=90); if(td==ans) break; r=r+1; theta=0.1; flag1=min(flag1,flag); } while(r<=1000); cout<<endl<<"Arc Angle : "<<theta<<" degrees"; cout<<endl<<"Radius : "<<r<<" metres"; cout<< endl<<"Straight Part : "<<st; cout<<endl<<"Transition Curve: "<<ls; cout<<endl<<"Circular part: "<<r*thetar; cout<<endl<<"Total distance : "<<(st+ls+(r*thetar))*2; cout<<endl<<"Coordinates of the Transition curve : "; cout<<endl<<"X"<<" "<<"Y"; cout<<endl<<cx<<" "<<cy; float end=ls; ls=1; while(ls<=end) { x2=(ls-(pow(ls,5)/(40*a*a))+(pow(ls,9)/(3456*a*a*a*a))); y2=((pow(ls,3)/(6*a))(pow(ls,7)/(336*a*a*a))+(pow(ls,11)/(42240*pow(a,5)))); cout<<endl<<x2+cx<<" "<<y2+cy; ls++; } getch(); return 0; } //End of Code

Sample Input and Output:

You might also like