디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

나는 사실 순수한 컴공이 아님요...

1q2w3e(165.246) 2010.11.20 23:00:59
조회 192 추천 0 댓글 2

/*#####################################################################################
프로그램 작성일 : 2010.11.10
제출일 : 2010.11.15
CAD/CAM Project 1 : Milling(Algorithm ,working Time ,Part Program)
산업공학과 120XXXX XXX

NOTE : 변수값을 입력받아 정사각형 재료의 툴 패스 좌표를 구하며 그 툴패스 좌표에 따른 가공거리
비 가공거리를 산출해 가공시간을 구한다. 소수점 단위오차를 줄이기 위해 정수형 좌표값이 아닌 실수형
좌표값으로 계산하였다. 계산결과는 TEXT 파일로 출력되며 이 파일은 툴패스_좌표.txt로 자동저장 된다.

작성언어 : C언어(Microsoft Visual C++ 2008 Express)
######################################################################################*/

#include <stdio.h>
#include <math.h>

void main()
{
        double x_one; //X1좌표
        double x_two; //X2좌표
        double y_one; //Y1좌표
        double y_two; //Y2좌표
        double init_cool_x; //툴의 처음 시작위치(x)
        double init_cool_y; //툴의 처음 시작위치(y)

        double tool_diameter; //툴 지름
        double hang_over; //행오버 비율
        double work_a; //가공여유

        double work_length; //가공거리
        double nwork_length; //비가공거리

        double pro_feed; //가공feed
        double npro_feed; //비가공feed

        int i; //for 반복수
        int n; //for 반복의 끝


        printf("X1,X2,Y1,Y2 좌표 입력 : ");
        scanf("%lf %lf %lf %lf",&x_one,&x_two,&y_one,&y_two);
        printf("툴의 처음위치를 입력 :");
        scanf("%lf %lf",&init_cool_x,&init_cool_y);
        printf("툴의 지름 입력 : ");
        scanf("%lf",&tool_diameter);
        printf("행 오버 비율 입력(x.x) :");
        scanf("%lf",&hang_over);
        printf("가공여유 비율 입력(x.x) :");
        scanf("%lf",&work_a);
        printf("가공feed 비가공feed 입력 :");
        scanf("%lf %lf",&pro_feed,&npro_feed);

        n=(y_two-y_one)/(tool_diameter-tool_diameter*hang_over);
//반복수 구하기 : 모재의 Y축 길이/1회 반복 시 툴이 움직이는 거리
        
        FILE *fp = fopen("툴패스_좌표.txt","w");
//좌표를 저장할 텍스트 파일 생성

        fprintf(fp,"############################지정변수#################################\\n");
        
        fprintf(fp,"좌표 : (X1,X2,Y1,Y2)=(%f,%f,%f,%f)\\n",x_one,x_two,y_one,y_two);
        fprintf(fp,"밑변가로가 %f, 세로가 %f 인 직육면체 모재\\n",x_two-x_one,y_two-y_one);
        fprintf(fp,"툴의 지름 : %f\\n",tool_diameter);
        fprintf(fp,"행오버 비율 : %f %\\n",hang_over*100);
        fprintf(fp,"가공여유 비율 : %f %\\n",work_a*100);
        fprintf(fp,"가공피드 : %f\\n",pro_feed);
        fprintf(fp,"비가공피드 : %f\\n",npro_feed);

        fprintf(fp,"############################툴 패스#################################\\n");

        fprintf(fp,"PS(%f,%f)\\n",init_cool_x,init_cool_y); //처음 툴의 위치

        for(i=1;i<=n;i++)
        {
                if(i%2==1)
//홀수번 반복일 경우
                {
                        if(i==1)
//가공 시작위치인지 구분, 참고로 시작위치의 오버홀을 고려한 y값 계산은 그 다음 y값 계산과 다르다.
                        {
                                fprintf(fp,"P%d(%f,%f)\\n"
,2*i-1,x_one-(tool_diameter*work_a+tool_diameter/2.0)
,y_two-(double)i*(tool_diameter/2-tool_diameter*hang_over));

                                fprintf(fp,"P%d(%f,%f)\\n"
,2*i,x_two+(tool_diameter*hang_over-tool_diameter/2.0)
,y_two-(double)i*(tool_diameter/2-tool_diameter*hang_over));
                        }
                        else
                        {
                                if(i==n)
//홀수번째를 끝으로 끝날경우 공구가 마지막에 빠지는 곳 마킹
                                {
                                        fprintf(fp,"P%d(%f,%f)\\n"
,2*i-1,x_one-(tool_diameter*hang_over-tool_diameter/2.0)
,y_two-(double)i*(tool_diameter-tool_diameter*hang_over));

                                        fprintf(fp,"P%d(%f,%f)\\n"
,2*i,x_two+(tool_diameter*work_a+tool_diameter/2.0)
,y_two-(double)i*(tool_diameter-tool_diameter*hang_over));
                                        break;
                                }
                                else
                                {
                                        fprintf(fp,"P%d(%f,%f)\\n"
,2*i-1,x_one-(tool_diameter*hang_over-tool_diameter/2.0)
,y_two-(double)i*(tool_diameter-tool_diameter*hang_over));

                                        fprintf(fp,"P%d(%f,%f) \\n"
,2*i,x_two+(tool_diameter*hang_over-tool_diameter/2.0)
,y_two-(double)i*(tool_diameter-tool_diameter*hang_over));
                                }
                                
                        }
                }
                else if(i%2==0)
//짝수번 반복일 경우
                {
                        if(i==n)
//짝수번째를 끝으로 끝날경우 공구가 마지막에 빠지는 곳 마킹
                        {
                                fprintf(fp,"P%d(%f,%f)\\n"
,2*i-1,x_two+(tool_diameter*hang_over-tool_diameter/2.0)
,y_two-(double)i*(tool_diameter-tool_diameter*hang_over));

                                fprintf(fp,"P%d(%f,%f)\\n"
,2*i,x_one-(tool_diameter*hang_over+tool_diameter/2.0)
,y_two-(double)i*(tool_diameter-tool_diameter*hang_over));
                                break;
                        }
                        else
                        {
                                fprintf(fp,"P%d(%f,%f)\\n"
,2*i-1,x_two+(tool_diameter*hang_over-tool_diameter/2.0)
,y_two-(double)i*(tool_diameter-tool_diameter*hang_over));

                                fprintf(fp,"P%d(%f,%f)\\n"
,2*i,x_one-(tool_diameter*hang_over-tool_diameter/2.0)
,y_two-(double)i*(tool_diameter-tool_diameter*hang_over));
                        }
                }
        }
        fprintf(fp,"############################툴 패스#################################\\n\\n");

        fprintf(fp,"############################가공 시간#################################\\n");
//가로이동거리+세로이동거리
        fprintf(fp,"가공거리 : %f\\n",work_length=(n-2)*((x_two+(tool_diameter*hang_over-tool_diameter/2.0))
                                             -(x_one-(tool_diameter*hang_over-tool_diameter/2.0))
                                         +2*(x_two+(tool_diameter*hang_over-tool_diameter/2.0)
                                         -(x_one-(tool_diameter*work_a+tool_diameter/2.0))))
                                         +(n-1)*(tool_diameter-tool_diameter*hang_over));

        
        if(n%2==0)
//반복수 종료가 짝수 즉, 종료지점이 시작지점과 같은 쪽에 있음
        {
        fprintf(fp,"비가공거리:%f\\n"
,nwork_length=pow(pow(init_cool_x-(x_one-(tool_diameter*work_a+tool_diameter/2.0)),2.0)
+pow(init_cool_y-(x_two-(tool_diameter/2.0-tool_diameter*hang_over)),2.0),0.5)
          +pow(pow(init_cool_x-(x_one-(tool_diameter*hang_over+tool_diameter/2.0)),2.0)
+pow(init_cool_y-(y_two-(double)n*(tool_diameter*hang_over)),2.0),0.5));

        fprintf(fp,"비가공시간+가공시간= %f\\n",work_length/pro_feed+nwork_length/npro_feed);
        }
        else
//종료점이 시작점과 반대방향에 있는 경우
        {
                fprintf(fp,"비가공거리:%f\\n"
,nwork_length=pow(pow(init_cool_x-(x_one-(tool_diameter*work_a+tool_diameter/2.0)),2.0)
+pow(init_cool_y-(y_two-(tool_diameter/2.0-tool_diameter*hang_over)),2.0),0.5)
                    +pow(pow(init_cool_x-(x_two+(tool_diameter*work_a+tool_diameter/2.0)),2.0)
+pow(init_cool_y-(y_two-(double)n*(tool_diameter-tool_diameter*hang_over)),2.0),0.5));

                fprintf(fp,"비가공시간+가공시간= %f\\n",work_length/pro_feed+nwork_length/npro_feed);
        }
        fclose(fp);
}

---------------------------------------------------------------------------
그냥 이런거 맹그는데 쓰는것임... C언어는 도구일뿐...

가끔보면 나는 무척 병맛임... 왜 굳이 다른애들은 그냥 계산이 복잡해서 수치조작을 해대는데

왜 난 이 개고생을 할까...

그래도 뭐 이편이 정확하니까... 쩝...ㄲㄲㄲㄲㄲ

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 연예인 안됐으면 어쩔 뻔, 누가 봐도 천상 연예인은? 운영자 24/06/17 - -
233548 쉽게 벌던가 어렵게 벌던가 둘중 하나야 돈이란(112.152) 11.02.05 65 0
233547 나는 경기도 성남의 오사카 횽이닷! [4] 분당살람갤로그로 이동합니다. 11.02.05 105 0
233545 프로그래밍 암만 잘하면 모해 동원참치(61.255) 11.02.05 137 0
233544 나는 경기도 성남의 이숙정이다! [2] 이숙정(116.44) 11.02.05 105 0
233543 임베디드 질문. [4] 116.44(116.44) 11.02.05 150 0
233542 삼성 스마트폰 코드...가 틀린 말은 아니지 않음? [2] whosad(125.138) 11.02.05 146 1
233540 삼성들어가면 ㅋㅋ [9] ㅋㅋ(58.230) 11.02.05 313 0
233539 유리한 횽은 레전드??? [56] 컴돌이(58.77) 11.02.05 440 1
233538 횽들 서비스개시해서 3주만에 300명이면... [6] 맨틀맨(58.230) 11.02.05 157 0
233537 나 sds신입사원으로 들어왔는데 쫌 힘든듯....ㅠ [9] ㅇㅇㅇㅇ(121.174) 11.02.05 650 0
233536 수학과 나와서 플머하면 어때? [7] 울렁굴렁꿀렁(211.51) 11.02.05 250 0
233535 요 근방에서 덕후들을 보면 참 안쓰럽다 [2] 땡칠도사갤로그로 이동합니다. 11.02.05 198 0
233534 Java Exception개체 Reflection해서 Field 못가져와? [7] 물속의다이아갤로그로 이동합니다. 11.02.05 120 0
233533 형들덕뿐에 게시판 제작 거의 완료됐어!! 자동 넘어가기 메타 질문!! [5] 횽들(221.149) 11.02.05 107 0
233532 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 나름 역사깊은갤이네 가시지옼갤로그로 이동합니다. 11.02.05 82 0
233531 존나막 수억가지경우로 프로그래밍하면 뇌가탄생하지않음? [7] 가시지옼갤로그로 이동합니다. 11.02.05 200 0
233530 님들아 c언어 공부할 수 있는 사이트 아시는분? [3] ㅁㄴㅇ(1.177) 11.02.05 138 0
233529 글리젠이 없어서 최민수 개그 [2] 꿀레(14.33) 11.02.05 140 0
233528 흠냐 이거 가능합닌까??? [4] ㅇㅇㅇ(116.40) 11.02.05 121 0
233526 님들 매크로 같은거 만들려면 [3] 금고래갤로그로 이동합니다. 11.02.05 131 0
233525 지금 내 뇌 구조도 [1] 써니덕후갤로그로 이동합니다. 11.02.05 109 0
233524 노키아 폰에 QT 쓰인다고 하지 않았음? [7] 분당살람갤로그로 이동합니다. 11.02.05 135 0
233522 횽들~ JAVa잇잔아요~ [1] 복학생2(116.36) 11.02.05 89 0
233521 이게 뭐징?.jpg [1] Mayu갤로그로 이동합니다. 11.02.05 289 0
233520 그루폰 창업자 ㄷㄷ [1] 흠냐리(61.255) 11.02.05 253 0
233519 보통 학교에서 c언어 구조체까지 배우나? [3] 금호족기(61.75) 11.02.05 195 0
233518 간단한 포인터 질문 [1] 금호족기(61.75) 11.02.05 84 0
233517 이거 왜 이미지 퀄차이가 나는겅미? [3] 흠냐리(61.255) 11.02.05 178 0
233515 마크주커버그가 페이스북... [5] 낰칰(58.230) 11.02.05 301 0
233513 [김지수갤러리] 감성뮤지션 김지수의 22번째 생일떡 돌리러왔어요! [10] ♪옥뚤♬갤로그로 이동합니다. 11.02.05 186 0
233512 안녕하세요 프로그래밍 입갤하려는 젖밥입니다 [1] 개밥바라기.갤로그로 이동합니다. 11.02.05 148 0
233510 올리디버거 스트링에 안뜨는 문구는 어떻게 찾죠? [5] 123(116.34) 11.02.05 124 0
233509 파이썬 이제 배워보려고 하는데요.. [4] 아오(220.79) 11.02.05 185 0
233508 카울리에서 개인 블로그를 무료APP로 만들어주는 서비스를 하잖소? 흠냐리(61.255) 11.02.05 89 0
233507 Best GUI designer for eclipse? [7] VL갤로그로 이동합니다. 11.02.05 231 0
233506 친구가 집을 불태워먹었습니다 [3] 꿀레(14.33) 11.02.05 238 0
233505 음~ [10] 배스커빌갤로그로 이동합니다. 11.02.05 109 0
233504 배치파일 초고수님있나요? [2] ☣➎➊➎☣갤로그로 이동합니다. 11.02.05 138 0
233503 했당!!! 쿄쿄쿄나는야 해결사! [2] 흠냐리(61.255) 11.02.05 101 0
233502 노키아가 안드로이드 폰을 만들면 좋을텐데.. [3] sadf(119.193) 11.02.05 90 0
233501 헐 이거 어떻게 없애여? [2] 흠냐리(61.255) 11.02.05 120 0
233500 맥주가 생각나서 사왔다만 [1] 건꼬(211.59) 11.02.05 126 0
233499 백지에게 c언어 책추천좀요 [3] 늅늅이(211.41) 11.02.05 240 0
233498 php [3] SODmaster갤로그로 이동합니다. 11.02.05 91 0
233497 아뢰옵기 황송하오나 답답한 마음에 php질문하나 올립니다. [25] 형님들(125.129) 11.02.04 162 0
233496 놋북에 개발툴 세팅하는데 .3(203.223) 11.02.04 97 0
233495 C# ] 프로세스에 관해서 허허벌판갤로그로 이동합니다. 11.02.04 149 0
233493 제일 낮은 계층이라고 하면 역시 [1] Rei@디씨갤로그로 이동합니다. 11.02.04 103 0
233492 v4가 포화상태라서 v6체제로 가는거임? [5] (220.94) 11.02.04 145 0
233491 아 형들 그리고 리눅스 멀티부팅이여 [6] 늅늅이(211.41) 11.02.04 106 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2