mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-28 14:57:12 +00:00
add "whats new" button & tab, "start simulator" button and update solution description for simulator;
This commit is contained in:
1 parent
3c0c41ba33
commit
3232c45f6e
11 files changed
+99
-22
No files matched your search
Binary file not shown.
|
Before Width: | Height: | Size: 281 KiB After Width: | Height: | Size: 286 KiB |
+1
@@ -40,6 +40,7 @@ public interface TextMessages extends Messages {
|
|||||||
String overview();
|
String overview();
|
||||||
String sapSailing();
|
String sapSailing();
|
||||||
String search();
|
String search();
|
||||||
|
String startSimulator();
|
||||||
|
|
||||||
String countdownDays();
|
String countdownDays();
|
||||||
String countdownHours();
|
String countdownHours();
|
||||||
|
|||||||
+1
@@ -32,6 +32,7 @@ whatsNew=What''s new
|
|||||||
overview=Overview
|
overview=Overview
|
||||||
sapSailing=SAP Sailing
|
sapSailing=SAP Sailing
|
||||||
search=Search
|
search=Search
|
||||||
|
startSimulator=Start Simulator
|
||||||
|
|
||||||
countdownDays=Days
|
countdownDays=Days
|
||||||
countdownHours=Hrs
|
countdownHours=Hrs
|
||||||
|
|||||||
+1
@@ -32,6 +32,7 @@ whatsNew=Neuigkeiten
|
|||||||
overview=Übersicht
|
overview=Übersicht
|
||||||
sapSailing=SAP Sailing
|
sapSailing=SAP Sailing
|
||||||
search=Suche
|
search=Suche
|
||||||
|
startSimulator=Simulator starten
|
||||||
|
|
||||||
countdownDays=Tage
|
countdownDays=Tage
|
||||||
countdownHours=Std.
|
countdownHours=Std.
|
||||||
|
|||||||
+9
@@ -1,5 +1,8 @@
|
|||||||
package com.sap.sailing.gwt.home.client.app;
|
package com.sap.sailing.gwt.home.client.app;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import com.google.gwt.place.shared.PlaceController;
|
import com.google.gwt.place.shared.PlaceController;
|
||||||
import com.sap.sailing.gwt.home.client.place.aboutus.AboutUsPlace;
|
import com.sap.sailing.gwt.home.client.place.aboutus.AboutUsPlace;
|
||||||
import com.sap.sailing.gwt.home.client.place.contact.ContactPlace;
|
import com.sap.sailing.gwt.home.client.place.contact.ContactPlace;
|
||||||
@@ -17,6 +20,7 @@ import com.sap.sailing.gwt.home.client.place.sponsoring.SponsoringPlace;
|
|||||||
import com.sap.sailing.gwt.home.client.place.start.StartPlace;
|
import com.sap.sailing.gwt.home.client.place.start.StartPlace;
|
||||||
import com.sap.sailing.gwt.home.client.place.whatsnew.WhatsNewPlace;
|
import com.sap.sailing.gwt.home.client.place.whatsnew.WhatsNewPlace;
|
||||||
import com.sap.sailing.gwt.home.client.place.whatsnew.WhatsNewPlace.WhatsNewNavigationTabs;
|
import com.sap.sailing.gwt.home.client.place.whatsnew.WhatsNewPlace.WhatsNewNavigationTabs;
|
||||||
|
import com.sap.sailing.gwt.ui.client.EntryPointLinkFactory;
|
||||||
|
|
||||||
public class HomePlacesNavigator extends AbstractPlaceNavigator {
|
public class HomePlacesNavigator extends AbstractPlaceNavigator {
|
||||||
|
|
||||||
@@ -40,6 +44,11 @@ public class HomePlacesNavigator extends AbstractPlaceNavigator {
|
|||||||
return createLocalPlaceNavigation(new WhatsNewPlace(navigationTab), new WhatsNewPlace.Tokenizer());
|
return createLocalPlaceNavigation(new WhatsNewPlace(navigationTab), new WhatsNewPlace.Tokenizer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getSimulatorURL() {
|
||||||
|
Map<String, String> parameters = new HashMap<String, String>();
|
||||||
|
return EntryPointLinkFactory.createSimulatorLink(parameters);
|
||||||
|
}
|
||||||
|
|
||||||
public PlaceNavigation<SponsoringPlace> getSponsoringNavigation() {
|
public PlaceNavigation<SponsoringPlace> getSponsoringNavigation() {
|
||||||
return createGlobalPlaceNavigation(new SponsoringPlace(), new SponsoringPlace.Tokenizer());
|
return createGlobalPlaceNavigation(new SponsoringPlace(), new SponsoringPlace.Tokenizer());
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-11
@@ -28,15 +28,15 @@ public class TabletAndDesktopWhatsNewView extends Composite implements WhatsNewV
|
|||||||
private static final HyperlinkImpl HYPERLINK_IMPL = GWT.create(HyperlinkImpl.class);
|
private static final HyperlinkImpl HYPERLINK_IMPL = GWT.create(HyperlinkImpl.class);
|
||||||
|
|
||||||
@UiField HTML sailingAnalyticsNotes;
|
@UiField HTML sailingAnalyticsNotes;
|
||||||
// @UiField HTML sailingSimulatorNotes;
|
@UiField HTML sailingSimulatorNotes;
|
||||||
@UiField HTML raceCommitteeAppNotes;
|
@UiField HTML raceCommitteeAppNotes;
|
||||||
|
|
||||||
@UiField Anchor sailingAnalyticsNotesAnchor;
|
@UiField Anchor sailingAnalyticsNotesAnchor;
|
||||||
// @UiField Anchor sailingSimulatorNotesAnchor;
|
@UiField Anchor sailingSimulatorNotesAnchor;
|
||||||
@UiField Anchor raceCommitteeAppNotesAnchor;
|
@UiField Anchor raceCommitteeAppNotesAnchor;
|
||||||
|
|
||||||
private final PlaceNavigation<WhatsNewPlace> sailingAnalyticNotesNavigation;
|
private final PlaceNavigation<WhatsNewPlace> sailingAnalyticNotesNavigation;
|
||||||
// private final PlaceNavigation<WhatsNewPlace> sailingSimulatorNoteNavigation;
|
private final PlaceNavigation<WhatsNewPlace> sailingSimulatorNoteNavigation;
|
||||||
private final PlaceNavigation<WhatsNewPlace> raceCommitteeAppNotesNavigation;
|
private final PlaceNavigation<WhatsNewPlace> raceCommitteeAppNotesNavigation;
|
||||||
|
|
||||||
private final List<Anchor> links;
|
private final List<Anchor> links;
|
||||||
@@ -49,19 +49,19 @@ public class TabletAndDesktopWhatsNewView extends Composite implements WhatsNewV
|
|||||||
initWidget(uiBinder.createAndBindUi(this));
|
initWidget(uiBinder.createAndBindUi(this));
|
||||||
|
|
||||||
sailingAnalyticsNotes.setHTML(WhatsNewResources.INSTANCE.getSailingAnalyticsNotesHtml().getText());
|
sailingAnalyticsNotes.setHTML(WhatsNewResources.INSTANCE.getSailingAnalyticsNotesHtml().getText());
|
||||||
// sailingSimulatorNotes.setHTML(WhatsNewResources.INSTANCE.getSailingSimulatorNotesHtml().getText());
|
sailingSimulatorNotes.setHTML(WhatsNewResources.INSTANCE.getSailingSimulatorNotesHtml().getText());
|
||||||
raceCommitteeAppNotes.setHTML(WhatsNewResources.INSTANCE.getRaceCommitteeAppNotesHtml().getText());
|
raceCommitteeAppNotes.setHTML(WhatsNewResources.INSTANCE.getRaceCommitteeAppNotesHtml().getText());
|
||||||
|
|
||||||
sailingAnalyticNotesNavigation = placesNavigator.getWhatsNewNavigation(WhatsNewNavigationTabs.SailingAnalytics);
|
sailingAnalyticNotesNavigation = placesNavigator.getWhatsNewNavigation(WhatsNewNavigationTabs.SailingAnalytics);
|
||||||
// sailingSimulatorNoteNavigation = placesNavigator.getWhatsNewNavigation(WhatsNewNavigationTabs.SailingSimulator);
|
sailingSimulatorNoteNavigation = placesNavigator.getWhatsNewNavigation(WhatsNewNavigationTabs.SailingSimulator);
|
||||||
raceCommitteeAppNotesNavigation = placesNavigator.getWhatsNewNavigation(WhatsNewNavigationTabs.RaceCommiteeApp);
|
raceCommitteeAppNotesNavigation = placesNavigator.getWhatsNewNavigation(WhatsNewNavigationTabs.RaceCommiteeApp);
|
||||||
|
|
||||||
sailingAnalyticsNotesAnchor.setHref(sailingAnalyticNotesNavigation.getTargetUrl());
|
sailingAnalyticsNotesAnchor.setHref(sailingAnalyticNotesNavigation.getTargetUrl());
|
||||||
// sailingSimulatorNotesAnchor.setHref(sailingSimulatorNoteNavigation.getTargetUrl());
|
sailingSimulatorNotesAnchor.setHref(sailingSimulatorNoteNavigation.getTargetUrl());
|
||||||
raceCommitteeAppNotesAnchor.setHref(raceCommitteeAppNotesNavigation.getTargetUrl());
|
raceCommitteeAppNotesAnchor.setHref(raceCommitteeAppNotesNavigation.getTargetUrl());
|
||||||
|
|
||||||
links = Arrays.asList(new Anchor[] { sailingAnalyticsNotesAnchor, /*sailingSimulatorNotesAnchor,*/ raceCommitteeAppNotesAnchor });
|
links = Arrays.asList(new Anchor[] { sailingAnalyticsNotesAnchor, sailingSimulatorNotesAnchor, raceCommitteeAppNotesAnchor });
|
||||||
contentWidgets = Arrays.asList(new HTML[] { sailingAnalyticsNotes, /*sailingSimulatorNotes,*/ raceCommitteeAppNotes });
|
contentWidgets = Arrays.asList(new HTML[] { sailingAnalyticsNotes, sailingSimulatorNotes, raceCommitteeAppNotes });
|
||||||
|
|
||||||
switch(navigationTab) {
|
switch(navigationTab) {
|
||||||
case PostRaceAnalytics:
|
case PostRaceAnalytics:
|
||||||
@@ -73,7 +73,7 @@ public class TabletAndDesktopWhatsNewView extends Composite implements WhatsNewV
|
|||||||
setActiveContent(sailingAnalyticsNotes, sailingAnalyticsNotesAnchor);
|
setActiveContent(sailingAnalyticsNotes, sailingAnalyticsNotesAnchor);
|
||||||
break;
|
break;
|
||||||
case SailingSimulator:
|
case SailingSimulator:
|
||||||
// setActiveContent(sailingSimulatorNotes, sailingSimulatorNotesAnchor);
|
setActiveContent(sailingSimulatorNotes, sailingSimulatorNotesAnchor);
|
||||||
break;
|
break;
|
||||||
case TrainingDiary:
|
case TrainingDiary:
|
||||||
break;
|
break;
|
||||||
@@ -85,13 +85,13 @@ public class TabletAndDesktopWhatsNewView extends Composite implements WhatsNewV
|
|||||||
setActiveContent(sailingAnalyticsNotes, sailingAnalyticsNotesAnchor);
|
setActiveContent(sailingAnalyticsNotes, sailingAnalyticsNotesAnchor);
|
||||||
handleClickEventWithLocalNavigation(event, sailingAnalyticNotesNavigation);
|
handleClickEventWithLocalNavigation(event, sailingAnalyticNotesNavigation);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
@UiHandler("sailingSimulatorNotesAnchor")
|
@UiHandler("sailingSimulatorNotesAnchor")
|
||||||
void featuresClicked(ClickEvent event) {
|
void featuresClicked(ClickEvent event) {
|
||||||
setActiveContent(sailingSimulatorNotes, sailingSimulatorNotesAnchor);
|
setActiveContent(sailingSimulatorNotes, sailingSimulatorNotesAnchor);
|
||||||
handleClickEventWithLocalNavigation(event, sailingSimulatorNoteNavigation);
|
handleClickEventWithLocalNavigation(event, sailingSimulatorNoteNavigation);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
@UiHandler("raceCommitteeAppNotesAnchor")
|
@UiHandler("raceCommitteeAppNotesAnchor")
|
||||||
void releaseNotesClicked(ClickEvent event) {
|
void releaseNotesClicked(ClickEvent event) {
|
||||||
setActiveContent(raceCommitteeAppNotes, raceCommitteeAppNotesAnchor);
|
setActiveContent(raceCommitteeAppNotes, raceCommitteeAppNotesAnchor);
|
||||||
|
|||||||
+1
-5
@@ -10,9 +10,7 @@
|
|||||||
<div class="{res.mainCss.grid}">
|
<div class="{res.mainCss.grid}">
|
||||||
<div class="{res.mediaCss.small12} {res.mediaCss.columns}">
|
<div class="{res.mediaCss.small12} {res.mediaCss.columns}">
|
||||||
<g:Anchor ui:field="sailingAnalyticsNotesAnchor" href="javascript:;" styleName="{local_res.css.whatsnew_nav_link}"><ui:text from='{i18n.solutionsSAPHeadline}'/></g:Anchor>
|
<g:Anchor ui:field="sailingAnalyticsNotesAnchor" href="javascript:;" styleName="{local_res.css.whatsnew_nav_link}"><ui:text from='{i18n.solutionsSAPHeadline}'/></g:Anchor>
|
||||||
<!--
|
<g:Anchor ui:field="sailingSimulatorNotesAnchor" href="javascript:;" styleName="{local_res.css.whatsnew_nav_link}"><ui:text from='{i18n.solutionsSimulatorHeadline}'/></g:Anchor>
|
||||||
<g:Anchor ui:field="sailingSimulatorNotesAnchor" href="javascript:;" styleName="{local_res.css.whatsnew_nav_link}"><ui:text from='{i18n.solutionsSimulatorHeadline}'/></g:Anchor>
|
|
||||||
-->
|
|
||||||
<g:Anchor ui:field="raceCommitteeAppNotesAnchor" href="javascript:;" styleName="{local_res.css.whatsnew_nav_link}"><ui:text from='{i18n.solutionsRaceHeadline}'/></g:Anchor>
|
<g:Anchor ui:field="raceCommitteeAppNotesAnchor" href="javascript:;" styleName="{local_res.css.whatsnew_nav_link}"><ui:text from='{i18n.solutionsRaceHeadline}'/></g:Anchor>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -20,9 +18,7 @@
|
|||||||
<div class="{res.mainCss.grid}">
|
<div class="{res.mainCss.grid}">
|
||||||
<div class="{res.mediaCss.small12} {res.mediaCss.columns}">
|
<div class="{res.mediaCss.small12} {res.mediaCss.columns}">
|
||||||
<g:HTML ui:field="sailingAnalyticsNotes" />
|
<g:HTML ui:field="sailingAnalyticsNotes" />
|
||||||
<!--
|
|
||||||
<g:HTML ui:field="sailingSimulatorNotes" />
|
<g:HTML ui:field="sailingSimulatorNotes" />
|
||||||
-->
|
|
||||||
<g:HTML ui:field="raceCommitteeAppNotes" />
|
<g:HTML ui:field="raceCommitteeAppNotes" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+12
-1
@@ -45,6 +45,8 @@ public class Solutions extends Composite {
|
|||||||
|
|
||||||
@UiField Anchor sailingAnalyticsDetailsAnchor;
|
@UiField Anchor sailingAnalyticsDetailsAnchor;
|
||||||
@UiField Anchor raceCommitteeAppDetailsAnchor;
|
@UiField Anchor raceCommitteeAppDetailsAnchor;
|
||||||
|
@UiField Anchor simulatorStartAnchor;
|
||||||
|
@UiField Anchor simulatorAppDetailsAnchor;
|
||||||
|
|
||||||
private final PlaceNavigation<SolutionsPlace> sailingAnalyticsNavigation;
|
private final PlaceNavigation<SolutionsPlace> sailingAnalyticsNavigation;
|
||||||
private final PlaceNavigation<SolutionsPlace> raceCommitteeAppNavigation;
|
private final PlaceNavigation<SolutionsPlace> raceCommitteeAppNavigation;
|
||||||
@@ -56,6 +58,7 @@ public class Solutions extends Composite {
|
|||||||
|
|
||||||
private final PlaceNavigation<WhatsNewPlace> sailingAnalyticsDetailsNavigation;
|
private final PlaceNavigation<WhatsNewPlace> sailingAnalyticsDetailsNavigation;
|
||||||
private final PlaceNavigation<WhatsNewPlace> raceCommitteeAppDetailsNavigation;
|
private final PlaceNavigation<WhatsNewPlace> raceCommitteeAppDetailsNavigation;
|
||||||
|
private final PlaceNavigation<WhatsNewPlace> simulatorAppDetailsNavigation;
|
||||||
private final HomePlacesNavigator placesNavigator;
|
private final HomePlacesNavigator placesNavigator;
|
||||||
|
|
||||||
public Solutions(SolutionsNavigationTabs navigationTab, HomePlacesNavigator placesNavigator) {
|
public Solutions(SolutionsNavigationTabs navigationTab, HomePlacesNavigator placesNavigator) {
|
||||||
@@ -71,9 +74,12 @@ public class Solutions extends Composite {
|
|||||||
|
|
||||||
sailingAnalyticsDetailsNavigation = placesNavigator.getWhatsNewNavigation(WhatsNewNavigationTabs.SailingAnalytics);
|
sailingAnalyticsDetailsNavigation = placesNavigator.getWhatsNewNavigation(WhatsNewNavigationTabs.SailingAnalytics);
|
||||||
raceCommitteeAppDetailsNavigation = placesNavigator.getWhatsNewNavigation(WhatsNewNavigationTabs.RaceCommiteeApp);
|
raceCommitteeAppDetailsNavigation = placesNavigator.getWhatsNewNavigation(WhatsNewNavigationTabs.RaceCommiteeApp);
|
||||||
|
simulatorAppDetailsNavigation = placesNavigator.getWhatsNewNavigation(WhatsNewNavigationTabs.SailingSimulator);
|
||||||
|
|
||||||
sailingAnalyticsDetailsAnchor.setHref(sailingAnalyticsDetailsNavigation.getTargetUrl());
|
sailingAnalyticsDetailsAnchor.setHref(sailingAnalyticsDetailsNavigation.getTargetUrl());
|
||||||
raceCommitteeAppDetailsAnchor.setHref(raceCommitteeAppDetailsNavigation.getTargetUrl());
|
raceCommitteeAppDetailsAnchor.setHref(raceCommitteeAppDetailsNavigation.getTargetUrl());
|
||||||
|
simulatorAppDetailsAnchor.setHref(simulatorAppDetailsNavigation.getTargetUrl());
|
||||||
|
simulatorStartAnchor.setHref(placesNavigator.getSimulatorURL());
|
||||||
|
|
||||||
sailingAnalyticsNavigation = placesNavigator.getSolutionsNavigation(SolutionsNavigationTabs.SailingAnalytics);
|
sailingAnalyticsNavigation = placesNavigator.getSolutionsNavigation(SolutionsNavigationTabs.SailingAnalytics);
|
||||||
raceCommitteeAppNavigation = placesNavigator.getSolutionsNavigation(SolutionsNavigationTabs.RaceCommiteeApp);
|
raceCommitteeAppNavigation = placesNavigator.getSolutionsNavigation(SolutionsNavigationTabs.RaceCommiteeApp);
|
||||||
@@ -131,7 +137,12 @@ public class Solutions extends Composite {
|
|||||||
public void sailingAnalyticsDetailsClicked(ClickEvent e) {
|
public void sailingAnalyticsDetailsClicked(ClickEvent e) {
|
||||||
handleClickEventWithPlaceController(e, sailingAnalyticsDetailsNavigation);
|
handleClickEventWithPlaceController(e, sailingAnalyticsDetailsNavigation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@UiHandler("simulatorAppDetailsAnchor")
|
||||||
|
public void simulatorAppDetailsAnchorClicked(ClickEvent e) {
|
||||||
|
handleClickEventWithPlaceController(e, simulatorAppDetailsNavigation);
|
||||||
|
}
|
||||||
|
|
||||||
private void scrollToView(SolutionsNavigationTabs navigationTab) {
|
private void scrollToView(SolutionsNavigationTabs navigationTab) {
|
||||||
switch (navigationTab) {
|
switch (navigationTab) {
|
||||||
case SailingAnalytics:
|
case SailingAnalytics:
|
||||||
|
|||||||
+3
-1
@@ -67,7 +67,9 @@
|
|||||||
<div class="{res.mediaCss.small5} {res.mediaCss.smalloffset7} {res.mediaCss.columns}">
|
<div class="{res.mediaCss.small5} {res.mediaCss.smalloffset7} {res.mediaCss.columns}">
|
||||||
<h2><ui:text from='{i18n.solutionsSimulatorHeadline}'/></h2>
|
<h2><ui:text from='{i18n.solutionsSimulatorHeadline}'/></h2>
|
||||||
<p><ui:text from='{i18n.solutionsSimulatorText}'/></p>
|
<p><ui:text from='{i18n.solutionsSimulatorText}'/></p>
|
||||||
<!-- <a href="#" class="{res.mainCss.button}">Learn More</a> -->
|
<g:Anchor ui:field="simulatorAppDetailsAnchor" styleName="{res.mainCss.button}"><ui:text from='{i18n.whatsNew}'/></g:Anchor>
|
||||||
|
<span> </span>
|
||||||
|
<g:Anchor ui:field="simulatorStartAnchor" target="_blank" styleName="{res.mainCss.button}"><ui:text from='{i18n.startSimulator}'/></g:Anchor>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+4
@@ -9,6 +9,10 @@ public class EntryPointLinkFactory extends AbstractEntryPointLinkFactory {
|
|||||||
return createEntryPointLink("/gwt/RaceBoard.html", parameters);
|
return createEntryPointLink("/gwt/RaceBoard.html", parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String createSimulatorLink(Map<String, String> parameters) {
|
||||||
|
return createEntryPointLink("/gwt/Simulator.html", parameters);
|
||||||
|
}
|
||||||
|
|
||||||
public static String createLeaderboardLink(Map<String, String> parameters) {
|
public static String createLeaderboardLink(Map<String, String> parameters) {
|
||||||
return createEntryPointLink("/gwt/Leaderboard.html", parameters);
|
return createEntryPointLink("/gwt/Leaderboard.html", parameters);
|
||||||
}
|
}
|
||||||
|
|||||||
+56
-4
@@ -4,12 +4,64 @@
|
|||||||
<div id="mainContent">
|
<div id="mainContent">
|
||||||
<h4 class="articleHeadline">What's New - Strategy Simulator</h4>
|
<h4 class="articleHeadline">What's New - Strategy Simulator</h4>
|
||||||
<div class="innerContent">
|
<div class="innerContent">
|
||||||
<h5 class="articleSubheadline">September 2014</h5>
|
<h5 class="articleSubheadline">October 2014</h5>
|
||||||
|
|
||||||
<ul class="bulletList">
|
<ul class="bulletList">
|
||||||
<li>Point 1...
|
<li>Simulation is being integrated into the race board (see What's New in Sailing Analytics)</li>
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<h5 class="articleSubheadline">August 2014</h5>
|
||||||
|
<ul class="bulletList">
|
||||||
|
<li>Accuracy of optimal course calculation has been improved</li>
|
||||||
|
<li>Streamlet motion is now calibrated to physical reality on large zoom levels of the map</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h5 class="articleSubheadline">April 2014</h5>
|
||||||
|
<ul class="bulletList">
|
||||||
|
<li>Wind is visualized using animated streamlets based on a swarm of particles which locally follow the wind</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h5 class="articleSubheadline">September 2013</h5>
|
||||||
|
<ul class="bulletList">
|
||||||
|
<li>Windbot based on RaspberryPi to construct real, spatially resolved wind vector fields from wind measurements</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h5 class="articleSubheadline">June 2013</h5>
|
||||||
|
<ul class="bulletList">
|
||||||
|
<li>Optimal courses shown as "Omniscient" are determined by an heuristic search algorithm greatly improving accuracy and runtime performance</li>
|
||||||
|
<li>Sailing angles are represented with full numeric accuracy</li>
|
||||||
|
<li>Water current is taken into account</li>
|
||||||
|
<li>Support up- and downwind legs</li>
|
||||||
|
<li>1-Click Simulation simplifies the user interaction</li>
|
||||||
|
<li>Race course map for Kieler Woche and Travemuender Woche</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h5 class="articleSubheadline">March 2013</h5>
|
||||||
|
<ul class="bulletList">
|
||||||
|
<li>What-if simulation comparing sailed GPS-track and simulated course with changed locations of turns for
|
||||||
|
answering questions like: would it have been advantageous to do the second turn a bit later?</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h5 class="articleSubheadline">February 2013</h5>
|
||||||
|
<ul class="bulletList">
|
||||||
|
<li>Strategy Simulator becomes a part of SAP's Sailing Analytics suite</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h5 class="articleSubheadline">December 2012</h5>
|
||||||
|
<ul class="bulletList">
|
||||||
|
<li>Polar diagram chart is available</li>
|
||||||
|
<li>Multiple boat classes are supported based on polar diagrams in tabular format provided as CSV-files</li>
|
||||||
|
<li>Several wind visualization approaches are supported: arrows on a grid, as well as, heatmap combined with bearing lines (either grid or integrated across race course)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h5 class="articleSubheadline">June 2012</h5>
|
||||||
|
<ul class="bulletList">
|
||||||
|
<li>First upwind-only prototype of sailing simulation is available</li>
|
||||||
|
<li>Optimal courses shown as "Omniscient" are calculated with an implementation of Dijkstra's algorithm on a rectangular spatial grid</li>
|
||||||
|
<li>Wind is visualized by arrows which scale with wind speed</li>
|
||||||
|
<li>Race course definition with 2 mouse clicks for start and end</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
Reference in new issue
Block a user