[Scummvm-git-logs] scummvm master -> a66e661df194963d4e649d122c33255e05a2e588

dafioram dafioram at gmail.com
Sun Sep 9 01:49:11 CEST 2018


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
a66e661df1 GRAPHICS: Simplify trig usage in primitives


Commit: a66e661df194963d4e649d122c33255e05a2e588
    https://github.com/scummvm/scummvm/commit/a66e661df194963d4e649d122c33255e05a2e588
Author: David Fioramonti (dafioram at gmail.com)
Date: 2018-09-08T16:36:57-07:00

Commit Message:
GRAPHICS: Simplify trig usage in primitives

Combined if statements and simplified trig.

cos(atan2(y,x)) = x / sqrt(x^2 + y^2) and
sin(atan2(y,x)) = y / sqrt(x^2 + y^2).

Changed paths:
    graphics/primitives.cpp


diff --git a/graphics/primitives.cpp b/graphics/primitives.cpp
index 76c44b6..1e48ca1 100644
--- a/graphics/primitives.cpp
+++ b/graphics/primitives.cpp
@@ -121,19 +121,16 @@ void drawThickLine2(int x1, int y1, int x2, int y2, int thick, int color, void (
 
 	if (dy <= dx) {
 		/* More-or-less horizontal. use wid for vertical stroke */
-		/* Doug Claar: watch out for NaN in atan2 (2.0.5) */
 
 		/* 2.0.12: Michael Schwartz: divide rather than multiply;
 			  TBB: but watch out for /0! */
-		double ac = cos(atan2((double)dy, (double)dx));
-		if (ac != 0) {
-			wid = thick / ac;
+		if (dx != 0 && thick != 0) {
+			double ac_recip = 1/dx * sqrt(dx * dx + dy * dy); // 1 / cos(atan2((double)dy, (double)dx));
+			wid = thick * ac_recip;
 		} else {
 			wid = 1;
 		}
-		if (wid == 0) {
-			wid = 1;
-		}
+
 		d = 2 * dy - dx;
 		incr1 = 2 * dy;
 		incr2 = 2 * (dy - dx);
@@ -185,14 +182,12 @@ void drawThickLine2(int x1, int y1, int x2, int y2, int thick, int color, void (
 		/* More-or-less vertical. use wid for horizontal stroke */
 		/* 2.0.12: Michael Schwartz: divide rather than multiply;
 		   TBB: but watch out for /0! */
-		double as = sin(atan2((double)dy, (double)dx));
-		if (as != 0) {
-			wid = thick / as;
+		if (dy != 0 && thick != 0) {
+			double as_recip = 1/dy * sqrt(dx * dx + dy * dy); // 1 / sin(atan2((double)dy, (double)dx));
+			wid = thick * as_recip;
 		} else {
 			wid = 1;
 		}
-		if (wid == 0)
-			wid = 1;
 
 		d = 2 * dx - dy;
 		incr1 = 2 * dx;





More information about the Scummvm-git-logs mailing list