함수로 OUT값 전달

분류없음 | 2011/08/05 00:34 | adioshun
#define IN
#define OUT

main ()
{
double gpgga_lat=37.1559;
double gpgga_lon=127.0033;

double rX=0;
double rY=0;

cal(gpgga_lat, gpgga_lon, &rX, &rY);

//결과값 출력
printf(" rX [%5.4f]\n", rX);
printf(" rY [%5.4f]\n", rY);


}


int cal(IN double lat, IN double lon, OUT double *x, OUT double *y)
{
...............................

*x = m_North;
*y = m_East;

}
2011/08/05 00:34 2011/08/05 00:34

ubuntu에 gtk 설치및 hello world

분류없음 | 2011/08/04 01:16 | adioshun
설치 

apt-get install gnome-core-devel build-essential

소스 코드
#include <gtk/gtk.h>

void
hello (void)
{
  g_print ("Hello World\n");
}

void
destroy (void)
{
  gtk_main_quit ();
}

int
main (int argc, char *argv[])
{
  GtkWidget *window;
  GtkWidget *button;

  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_signal_connect (GTK_OBJECT (window), "destroy",
		      GTK_SIGNAL_FUNC (destroy), NULL);
  gtk_container_border_width (GTK_CONTAINER (window), 10);

  button = gtk_button_new_with_label ("Hello World");

  gtk_signal_connect (GTK_OBJECT (button), "clicked",
		      GTK_SIGNAL_FUNC (hello), NULL);
  gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
			     GTK_SIGNAL_FUNC (gtk_widget_destroy),
			     GTK_OBJECT (window));
  gtk_container_add (GTK_CONTAINER (window), button);
  gtk_widget_show (button);

  gtk_widget_show (window);

  gtk_main ();

  return 0;
}
컴파일
gcc `pkg-config --cflags --libs gtk+-2.0` base.c
Makefile
GTK_INCLUDE = -I/usr/local/include
GTK_LIB = -L/usr/local/lib
X11_LIB = -L/usr/X11R6/lib
CC = gcc -g -Wall
CFLAGS = $(GTK_INCLUDE)
LDFLAGS = $(GTK_LIB) $(X11_LIB) -lgtk -lgdk -lglib -lX11 -lXext -lm

OBJS = helloworld.o

helloworld:	$(OBJS)
#	$(CC) $(GTK_LIB) $(X11_LIB) $(OBJS) -o helloworld $(LDFLAGS)

clean:
	rm -f *.o *~ helloworld
2011/08/04 01:16 2011/08/04 01:16

위도 경도로 거리 계산하기

분류없음 | 2011/08/03 22:27 | adioshun
참고 : http://blog.naver.com/hyj88zzang?Redirect=Log&logNo=95828284

위도
시 - 111km
분 - 1.85km
초 - 30.8m

경도
시 -88.8km
분 - 1.48km
초 - 25m


NMEA데이터에서 도,분,초, 계산법
ex) 3717.55
- 도 : 37
- 분 : 17분
- 초 : 0.55*60


------------------------------------------------

NMEA로 수신된 GPGGA의 위도, 경도 정보를 도,분,초로 계산 법이

$GPGGA,114455.532,3735.0079,N,12701.6446,E,1,03,7.9,48.8,M,19.6,M,0.0,0000*48

3735.0079 => 37 + 35.0079/60 -> 37.583465

4자리중 앞 2자리 37 -> 37도

4자리중 뒤 2자리 35 -> 35분

소수점 0.0079*60 = 0.474 -> 47   맞나요?

------------------------------------------------------------------

안녕하세요

(주)아센코리아입니다

답변을 드리면

37도 35분 0.47초를 나타내며 고객님의 말씀처럼

4자리 뒤에 숫자에 x60로 연산 하시면

0.47이 계산되며

47초가 아닌 0.47초로 나타냅니다

감사합니다


------------------------

:






해당 위도와 경도가  주어진 구역반경에 들어오는지 체크 한다.
 
아래는 위,경도를 통한 도분초를 계산하는 방법이며 마지막에 실제 함수를 작성하였다.
 
구글 거리계산기와 아래 함수를 비교하여 보니 정확한 계산치를 확인 할 수 있었다.
 
하지만, 아래 계산법은 우리 나라에 한해서만 적용되어야 할 듯 하다.( 서핑 하다 보니 이러저러한 이유로 지구 전체에 대한 것은 좀더 상세한 계산법이 필요 할 듯 하다)

 lat : 위도 , lon: 경도.
 
 ex>35.3036944
 도 : 35
 분 : 0.3036944 * 60 : int : 18
 초 : (0.3036944 - 18/60)*3600 : 0.0036944*3600: 13.3
 35도 18분 13.3초

  A 지점 : 동경 127도 30분 20초    북위 : 36도 27분 08초
  B 지점 : 동경 127도 29분 30초    북위 : 36도 28분 00초
  C 지점 : 경도  00도   1분 10초    위도 : 00도 01분 08초
  경도간 거리 : 0도*88.8 +  1분 * 1.48 + 10초 * 0.025 = 1.73km
  위도간 거리 : 0도*111  +  1분 * 1.85 +   8초 * 0.031 = 2.10km
  두지점간 거리 : 루트 (1.73^2 + 2.10^2) = 2.72km
 
#define DIV_VALUE    10000000
 
int distanceCmp(unsigned int lat1, // 기준 위도,
unsigned int lon1, // 기준 경도,
unsigned int lat2,  // 대상 위도,
unsigned int lon2,  // 대상 경도
unsigned int nCmpLat, // 위도간 거리
unsigned int nCmpLon // 경도간 거리
)
{
/*
위도,경도에 대한 절대값 계산
*/
 double lon = lon1 > lon2  ? (lon1 - lon2)/(double)DIV_VALUE   : (lon2-lon1)/(double)DIV_VALUE;
 double lat =  lat1 > lat2  ? (lat1 - lat2)/(double)DIV_VALUE   : (lat2-lat1)/(double)DIV_VALUE;
 
/*
경도에 대한 도분초및 거리 계산
*/
 int rad = (int)lon;
 int min = (lon-rad)*60;
 double sec = ((lon-rad) - min/60)*3600;
 unsigned int lon_dist, lat_dist;
 lon_dist = ((rad * 88.8) + (min*1.48) + (sec*0.025)) * 1000; // m단위
 
/*
위도에 대한 도분초및 거리 계산
*/
 rad = (int)lat;
 min = (lat-rad)*60;
 sec = ((lat-rad) - min/60)*3600;
 lat_dist = ((rad * 111) + (min*1.85) + (sec*0.031)) * 1000; // m단위
 
 if( nCmpLat == 0 ){ // 원 형태의 구역반경
 // 직선거리만을 조건으로 한다.
  int realDist = sqrt((lon_dist*lon_dist)+(lat_dist*lat_dist));
  if( nCmpLon >= realDist ){
   return 1;
  }
 }else if( nCmpLat >= lat_dist && nCmpLon >= lon_dist ){ // 사각 형태의 구역반경
// 종/횡측 거리안에 들어오는지 확인한다.
  return 1;
 }
 
 return 0;
}
 
[출처] 위도, 경도로 거리(구역) 구하기|작성자 서비
2011/08/03 22:27 2011/08/03 22:27