현재 정수 값만 처리 할 수있는 플로팅 클래스를 구현했습니다. 유동 번호를 처리하기 위해 기술/메커니즘에 대한 조언을 받고 싶습니다. 사용 된 라이브러리는 GDI입니다. 그런 다음 정수로 변환해야합니다실제 좌표 그리기
감사합니다,
안녕
현재 정수 값만 처리 할 수있는 플로팅 클래스를 구현했습니다. 유동 번호를 처리하기 위해 기술/메커니즘에 대한 조언을 받고 싶습니다. 사용 된 라이브러리는 GDI입니다. 그런 다음 정수로 변환해야합니다실제 좌표 그리기
감사합니다,
안녕
, 그들은 실제 픽셀을 그릴 정수로 변환 할 필요가있다.
그러나 일반적으로 말하자면 이 아니며은 각 플로트를 int로 캐스팅하고 그립니다. 그러면 거의 틀림없이 엉망이 될 것입니다. 대신 float의 크기를 조절할 필요가 있습니다. 다음으로을 정수로 반올림합니다. 대부분의 경우 사용자가 필요에 따라 확대/축소 할 수 있도록 배율 인수를 변수로 지정하려고합니다.
다른 가능성은 하드웨어가 대부분의 작업을 처리하도록하는 것입니다. 예를 들어 OpenGL을 사용하여 포인트를 렌더하고 내부적으로 부동 소수점으로 남겨두고 드라이버/하드웨어가 스케일링 및 정수로 변환. 이것은 상당히 가파른 비용을 가지고 있습니다 (OpenGL을 사용하여 유용하게 사용할 수 있습니다). 그러나 하드웨어 기반 렌더링은 빠르며, 일부 작업은 비교적 쉽게 처리 할 수 있습니다. 스케일링과 (필요한 경우) 2D와 같이 쉽게 3D 점을 표시 할 수 있습니다.
편집 : (주로 댓글에 대한 응답) 궁극적으로 화면의 해상도가 부동 소수점의 해상도보다 낮습니다. 예를 들어, 실제로 고해상도 화면 인 은 수평 해상도 2048 픽셀 인 일 수 있습니다. 해상도는 11 비트입니다. 심지어 단 정밀도 부동 소수점 수는 약 24 비트의 정밀도를 갖습니다. 24 비트 해상도를 12 비트 해상도로 줄이면 아무 것도 잃을 것입니다. 일반적으로 로트입니다.
그렇기 때문에 스케일링 팩터를 가변적으로 만들려면 이입니다. 사용자가 축소하여 전체 그림을 축소 된 해상도로 보거나 확대하여 고해상도로 볼 수 있도록 선택할 수 있습니다.
서브 픽셀 해상도가 언급되었으므로 : 도움이되지만 조금만입니다. 단일 픽셀로 매핑되는 수천 가지 항목을 해결하지는 않습니다.
쿨이 좋은 답변입니다. 그렇습니다. DirectDraw를 사용할 수있는 경험이 있지만 수동으로 크기를 조정하고 싶다면 예제 35.78의 값으로 어떻게 할 것입니까? 스케일링 팩터 1.2로 스케일링하면 35.78 * 1.2 = 42.936이 될 것이므로 43을 반올림한다고 가정 해 봅시다. 그러나 35.8을 스케일 할 때 어떻게됩니까? 같은 스케일링 인자로 다시 43을 얻습니다. 해상도는 어떨까요? 감사합니다. – Adi
@Adi : 하위 픽셀 해상도로 그리려면 앤티 앨리어싱 또는 WPF 또는 유사한 것으로 OpenGL/D3D를 사용하십시오. – Macke
는 MoveTo()
및 LineTo()
같은 기능에 전달합니다.
이 float
값은 무엇을 나타 냅니까? 나는 그들이 어떤 좌표라고 가정 할 것이다. , 당신이 필요로하는 범위는 그 후
를 해결하기 위해
편집 : 간단한 공식은 다음과 같습니다 어떤 점에서
X(dst) = X(src) * DPI(dst)/DPI(src)
스케일. 예를 들어, 모든 정수 값에 10을 곱하십시오. 부동 소수점 값에 10.0을 곱한 다음 잘라내거나 반올림합니다 (선택 사항). 이제 정상적으로 음모를 꾸밀 수 있습니다.
이렇게하면 그래프에서 정밀도가 높아집니다. 사진을 볼 때 축척 계수를 기억하십시오.
그렇지 않으면 플롯하기 전에 부동 소수점을 int로 변환하십시오.
대신 GDI +를 사용해도되지만 GDI 대신 부동 소수점 좌표를 사용하는 함수가 있습니다.
GDI? 우 .. 그게 정말 늙었 어. – Macke