2021. 6. 29. 19:32

라인 드로우를 구현할때, openGL, DX, winDC 등을 사용할 수 없는경우,

바닥부터 맨땅에 코딩을 해야하는 경우가 생기더라.

그때를 위한 참고용 코드.

 

Void DrawLine(int x1, int y1, int x2, int y2)
{
    int aX=0, aY=0;
    int cnt = 0;
    int dx = x2-x1;
    int dy = y2-y1;

    if(dx < 0) {addX = -1; dx = -dx;}
    else addX = 1;
    if(dy < 0) {addY = -1; dy = -dy;}
    else addY = 1;
    
    int x = x1;
    int y = y1;
    if(dx >= dy)
    {
        for(int i = 0 ; i < dx ; i++)
        {
            x += addX;
            cnt += dy;
            if(cnt >= dx)
            {
                y += addY; cnt -= dx;
            }
            drawPoint(x,y);
        }
    }
    else
    {
        for(int i = 0 ; i < dy ; i++)
        {
            y+= addY;
            cnt += dx;
            if(cnt >= dy)
            {
                x += addX; cnt -= dy;
            }
            darwPoint(x,y);
        }
    }
}

 

 

'Computer Programming > C,C++,MFC' 카테고리의 다른 글

[C/C++] C언어 입력함수 scanf  (0) 2017.02.15
[C/C++] Bit Field, 비트 변수 ':'  (0) 2017.02.13
[C/C++] fopen 함수의 옵션값 정리  (0) 2016.11.10
[C/C++] bsearch 함수  (0) 2016.06.22
[MFC]CString <-> Char* 변환  (0) 2013.11.08
Posted by 은돌군
2020. 6. 4. 16:55

Ctrl+G

'Computer Programming > Tip' 카테고리의 다른 글

[MAC] 마우스 휠 스크롤 방향  (0) 2016.09.06
[기타] Alt 한글 전환 레지스트리  (0) 2013.10.28
Posted by 은돌군
2017. 2. 15. 10:14

C언어의 대표적 함수 scanf 의 함수는 다음과 같은 형태를 가지고 있다.


int scanf (const char * format, ...);


사용 예는 다음과 같다.


scanf("%d", &input);


위 글은 숫자형을 입력받을때 사용하는 방식이다.


Visual Studio 2008 기준 전체 코드를 간단히 짜보면  다음과 같다.


#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])

{

int input;

scanf("%d", &input);

printf("%d\n", input);

return 0;

}


숫자값을 입력받고, 숫자값을 출력하는 코드이다.
실행시켜보면 다음과 같이 표출되는것을 확인할 수 있다.






Posted by 은돌군
2017. 2. 13. 16:01

C 언어에서 Bit 단위로 변수를 지정하고 싶은 경우, Bit Field 라는 기능을 사용한다


기본적인 선언 방법은 다음과 같다.


struct bitField {

BYTE bit1:1;

BYTE bit2:1;

BYTE bit3:1;

BYTE bit4:1;

BYTE bit5:1;

BYTE bit6:1;

}


이와 같이 선언하면 1Byte 에 6개의 변수로 각각 1bit 까지의 데이터를 사용할 수 있다.

1bit 이므로, 0과 1만 입력이 가능하며, 2를 입력하게 되면 앞 비트를 침범하게 된다.


bitField.bit1 = 2; 


이와 같이 데이터값을 셋팅하면, 2의 binary 값은 10 이므로 bitField.bit1 는 0, bitFile.bit2 는 1이 셋팅되게 된다.


bit 단위로 데이터를 저장하거나,  bit 단위의 프로토콜 데이터를 사용하면 상당히 유용한 기능이다.

나는 bit 단위로 정보를 잘라서 전송해야 하는 CAN 프로토콜 사용시 유용하게 사용하였다.


비트필드의 선언 변수형은 C 언어의 모든 변수형이 사용이 가능하며, unsigned 형 변수로 사용하지 않는다면 상당한 주의가 필요하다. 



'Computer Programming > C,C++,MFC' 카테고리의 다른 글

[C]LineDraw - 브레젠험 알고리즘  (0) 2021.06.29
[C/C++] C언어 입력함수 scanf  (0) 2017.02.15
[C/C++] fopen 함수의 옵션값 정리  (0) 2016.11.10
[C/C++] bsearch 함수  (0) 2016.06.22
[MFC]CString <-> Char* 변환  (0) 2013.11.08
Posted by 은돌군
2016. 12. 14. 10:02

사용자의 접속 IP를 확인하는 경우, 기본적으로 다음 코드를 이용하여 사용한다

 

$ip = $_SERVER['REMOTE_ADDR'];

ip, web header, port 등과같이 웹에서 사용하는 기본적인 정보들은 PHP의 "$_SERVER" API 에서 가져올 수 있다.다음은 "$_SERVER" 함수 로 가져올 수 있는 목록이다.

 

 

$_SERVER['DOCUMENT_ROOT'] = 현재 사이트가 위치한 서버상의 위치
$_SERVER['HTTP_ACCEPT_ENCODING'] = 인코딩 방식
$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 언어
$_SERVER['HTTP_USER_AGENT'] = 사이트 접속한 사용자 환경
$_SERVER['REMOTE_ADDR'] = 사이트 접속한 사용자 IP
$_SERVER['SCRIPT_FILENAME'] = 실행되고 있는 위치와 파일명
$_SERVER['SERVER_NAME'] = 사이트 도메인
$_SERVER['SERVER_PORT'] = 사이트가 사용하는 포트
$_SERVER['SERVER_SOFTWARE'] = 서버의 소프트웨어 환경
$_SERVER['GATEWAY_INTERFACE'] = CGI 정보
$_SERVER['SERVER_PROTOCOL'] = 사용된 서버 프로토콜
$_SERVER['REQUEST_URI'] = 현재페이지의 주소에서 도메인 제외
$_SERVER['PHP_SELF'] = 현재페이지의 주소에서 도메인과 넘겨지는 값 제외
$_SERVER['APPL_PHYSICAL_PATH'] = 현재페이지의 실제 파일 주소

 

Posted by 은돌군
2016. 11. 10. 10:30

fopen 함수를 종종 쓸일이 생기는데, 매번쓰는 옵션값 외에는 헷갈리기에 정리해 보았다.


fopen 함수는 파일 입출력을 위한 함수로 다음과 같이 사용할 수 있다.


FILE *fp = NULL;

//우선 파일 포인터로 사용할 변수를 선언하고, 
//경로와 모드값으로 파일을 오픈한뒤 파일포인터에 넣는다.
//fopen 함수의 형태는 다음과 같다.

//FILE *fopen(const char *filename, const char *mode);

fp = fopen("test.txt", "wb");

그리고 위에 fopen Mode 값으로 사용할 수 있는 값들은 다음과 같다.


r : Open for reading only. (읽기 전용)


w : Create for writing. If a file by that name already exists, it will be overwritten.

    (쓰기용으로 파일생성, 동일이름이 있다면 덮어씀.)


a : Append; open for writing at end-of-file or create for writing if the file does not exist.

    (동일명 파일 존재시 끝에 이어씀, 동일명 파일 없으면 쓰기용 파일 생성)


r+ : Open an existing file for update (reading and writing).

    (현재 있는 파일에 read/write 모두 덮어씀.)


w+ : Create a new file for update (reading and writing). 

      If a file by that name already exists, it will be overwritten.

    (읽기/쓰기용으로 파일 생성. 같은 파일 존재시 덮어)


a+ : Open for append; open (or create if the file does not exist) for update at the end of the file.

    (파일이있으면 뒤에 추가, 업다면 새로 생성)


t : Text Mode (텍스트 모드)


b : Binary Mode (이진 파일 모드)



'Computer Programming > C,C++,MFC' 카테고리의 다른 글

[C/C++] C언어 입력함수 scanf  (0) 2017.02.15
[C/C++] Bit Field, 비트 변수 ':'  (0) 2017.02.13
[C/C++] bsearch 함수  (0) 2016.06.22
[MFC]CString <-> Char* 변환  (0) 2013.11.08
[C/C++]OpenSSL Library 사용을 위해  (0) 2013.10.15
Posted by 은돌군
2016. 9. 6. 09:12

맥의 기본 설정 마우스 휠 스크롤은 Winodws 와 반대로 되어 있다.


맥에서는 설정에서 마우스 휠 방향을 설정할 수 있다.


방법은 다음과 같다.


> 시스템 환경설정 - 마우스

> 스크롤 방향 : 자연스럽게를 해제한다.


이렇게 하면 윈도우와 같은 방향의 휠 스크롤을 사용할 수 있다.

Posted by 은돌군
2016. 6. 28. 12:22

PHP의 변수는 숫자나 문자를 담아두는 곳이라 생각하면 된다.

다른 언어와 달리 식별자(int, char....) 없이 바로 사용할 수 있다.


다음 예제는 변수를 연산하고 출력하는 예제이다. 


<html>

<body>

<?php

$a=1;              //변수 $a에 1을 넣는다.

echo $a+1;       //$a에 1을 더하여 출력한다.

echo "<br />";  //다음줄로 간다.

$a=2;              //변수 $a에 2를 넣는다.

print $a+1;      //$a에 1을 더하여 출력한다.

echo "<br />";  //다음줄로 간다.

$b=1;             //$b에 1을넣는다.

$a = $a+$b;     //$a와 $b를 더하여 $a 에 넣는다.

echo $a;          //$a를 출력한다.

?>

</body>

</html>


//는 주석으로 //뒤에 나오는 내용은 프로그램으로 인식하지 않는다.

부연설명이라고 생각하면 된다.


위와 같이 $a 변수에 숫자를 넣어 연산에 사용할 수 있다.

Posted by 은돌군
2016. 6. 24. 15:01


유저로그인시 일정시간동안 유지를 하기 위해 사용하는 기능

PHP의 세션 지원은 지속적인 접근시 (다름 웹페이지에서) 어떤 데이터를 유지하는 방법이다.


웹 페이지에서 세션을 생성하면 다른 웹 페이지에서 데이터를 가져다 사용할 수 있다.

웹 종료 되면 파괴되며, 코드상으로도 세션을 파괴할 수 있다.


일반적으로 다음과 같이 사용한다.


Page1

session_start();

$_SESSION['user_id'] = "admin"; 


Page2

session_start();

$user_id = $_SESSION['user_id']; 


이와 같이 사용하면 Page2에서 Page1에서 입력한 정보를 사용할 수 있다.


다음은 세션을 파괴하는 코드이다.

session_destroy();




Posted by 은돌군
2016. 6. 22. 11:15

c++의 bsearch 함수는 이진검색을 하는 함수이다.

이진검색을 하기 위해서 자료는 반드시 정렬되어 있어야 한다.


c++의 bseacrh는 다음과 같이 사용할 수 있다.

bsearch 할 데이터의 구조에 맞게끔 compare 함수는 작성해야 한다.

(다양한 데이터 구조에서 사용할 수 있다.


셈플 코드는 다음과 같다.


int compare( const void *cmp1, const void *cmp2)

{

   return strcmp( (char *)cmp1, (char *)cmp2);

}


#define  SIZE_TABLE     10

#define  SIZE_ITEM      20


int main( void)

{

   char  table[SIZE_TABLE][SIZE_ITEM]  = { "com", "size", "aaaa", "bbbb", "cccc", "dddd"};

   char *ptr;


   ptr   = (char *)bsearch( "size", table, SIZE_TABLE, SIZE_ITEM, compare);

   printf( "find chracter = %sn", ptr);

  

   return 0;

}



Posted by 은돌군